[ aleksandar_vs @ 11.07.2011. 23:04 ] @
Molim za pomoc, problem je trivijalan, ali mucim se vec satima i ne umem da ga resim (naravno, pocetnik sam u flashu i ne znam ni gde da trazim problem)..

Imam MC sa padajucim menijem koji ima 3 stavke - svaka otvara poseban MC i to sve radi... medjutim, problem je sto otvara jedan preko drugog, tj, ne mogu da ocistim content prethodno startovanog MC-a (da ga nekako "refreshujem" na pocetak). Evo kako to izgleda:

http://users.hemo.net/aleks/flash/problem.swf

Probao sam i da ih stavim na timeline pa da ih pozivam sa gotoAndPlay ali onda ih skript u meniju ili ne vidi posto nisu svi MCi u pocetnom frejmu, ili nece da startuje MC - evo i tog pokusaja:

http://users.hemo.net/aleks/flash/problem1.swf

Evo i .fla fajla da vidite kako sam sve to zabrljao: http://users.hemo.net/aleks/flash/problem.zip

Molim ako neko ima vremena samo da mi kaze kako to da resim, ili barem u kom pravcu dalje da trazim resenje...

Hvala unapred,
Aleksandar

[ MenOfHonor @ 12.07.2011. 16:16 ] @
Mogao bi taj problem da rešiš korišćenjem gotoAndStop() metode kojoj kao argument prosledjuješ broj (ili naziv) frejma do kojeg želiš da odeš. U tvom slučaju kako bi se "o_namaMC" ukolonio i da bi samo "portfolioMC" bio vidljiv kada se klikne na taster "štampa", trebao bi da dodaš sledeće na 11. frejm:
Code:
MovieClip(root).pagesMC.o_namaMC.gotoAndStop(1);

S obzirom da se na prvom frejmu "o_namaMC"-a na stage-u ništa ne prikazuje on neće biti vidljiv pa će tako biti prikazan samo "portfolioMC". Isto treba da primeniš i na 21. frejm kako bi uklonio "portfolioMC" i prikazao samo "uslugeMC":
Code:
MovieClip(root).pagesMC.portfolioMC.gotoAndStop(1);

Inače sve ovo možeš i jednostavnije da napišeš, kako ne bi iznova ponavljao jedno isto, pa ćeš umesto ovoga:
Code:
MovieClip(root).pagesMC.o_namaMC.gotoAndPlay(2);
MovieClip(root).pagesMC.portfolioMC.gotoAndPlay(2);
MovieClip(root).pagesMC.usluge_MC.gotoAndPlay(2);

MovieClip(root).pagesMC.o_namaMC.gotoAndStop(1);
MovieClip(root).pagesMC.portfolioMC.gotoAndStop(1);
MovieClip(root).pagesMC.usluge_MC.gotoAndStop(1);

koristiti sledeće:
Code:
with (MovieClip(root).pagesMC)
{
    o_namaMC.gotoAndPlay(2);
    portfolioMC.gotoAndPlay(2);
    usluge_MC.gotoAndPlay(2);

    o_namaMC.gotoAndStop(1);
    portfolioMC.gotoAndStop(1);
    usluge_MC.gotoAndStop(1);
}

Pored ovog načina da bi uklonio movieclip mogao bi da koristiš removeChild() metod kome kao argument prosleđuješ naziv movieclip-a koji želiš da ukloniš sa stage-a. Ovakav pristup bi zahtevao veću izmenu postojećeg koda pa ti neću objašnjavati kako se on koristi. Jednostavniji je prvi način.
[ aleksandar_vs @ 13.07.2011. 12:05 ] @
Bojane, zaista ti pristaje Nickname "Čovek od časti" - svaka ti čast na želji da pomogneš i puno hvala na odgovoru!

Sad sve radi- iako imam gomilu koda nije mi teško da ga sa copy/paste ubacim svuda gde treba, čisto da bih završio ovaj projekat koji sam započeo, ali nakon toga zaista moram da nađem neki tutorijal za child() pa da naučim da postavim sve to kako treba (hvala i za taj hint ;)

Puno pozdrava od mene,
i još jednom 10x!



[ MenOfHonor @ 13.07.2011. 13:57 ] @
You're quite welcome. Ukratko, svaki objekat koji kreiraš u ActionScript-u (bilo da je u pitanju tekst polje, animirani klip, ili nešto treće) ne prikazuje se na pozornici sve dok ga ti sam eksplicitno ne dodaš korišćenjem addChild() metode. Ovo je jedan od uobičajenih problema koji se javlja kod početnika koji koristeći AS3 žele da naprave neki objekat i kada testiraju projekat ustanove da se on ne prikazuje. Istina, objekat je napravljen i postoji ali se ne prikazuje zato što nije dodat na "listu za prikazivanje" (display list). Ovo se postiže korišćenjem pomenute addChild() metode gde se kao argument navodi naziv objekta. U tvom slučaju kod koji se nalazi na prvom frejmu za funkciju koja se poziva kada se pritisne taster "onama_podmenu1" izgledao bi ovako:
Code:
function podmenu1Click(event:MouseEvent):void
{
    with (MovieClip(root).pagesMC)
    {
        if (stage.contains(portfolioMC))
        {
            removeChild(portfolioMC);
        }
        if (stage.contains(uslugeMC))
        {
            removeChild(uslugeMC);
        }
        if (! stage.contains(o_namaMC))
        {
            addChild(o_namaMC);
            o_namaMC.gotoAndPlay(2);
        }
        else
        {
            o_namaMC.gotoAndPlay(2);
        }
    }
}

Sad vidiš zašto sam ti predložio prvi način. Svaki put kada želiš da ukloniš neki objekat (a kada znaš da ćeš ga opet dodavati) potrebno je da ispitaš da li se on zaista nalazi u display list-i. Ako pokušaš da ukloniš objekat koji se na njoj ne nalazi dobićeš grešku, zato sam u ovom primeru koristio proveru da li se "portfolioMC" i "uslugeMC" već nalaze na stage-u. Ovo sam postigao korišćenjem contains() metode gde sam kao argument naveo naziv MC-a koji želim da uklonim. Takođe sam proveravao i da li se "o_namaMC" već nalazi na listi i ako se ne nalazi onda sam ga dodao, u suprotnom će samo započeti reprodukcija od njegovog drugog frejma. Ovo je praktično sve što ti je potrebno i na 11. i 21. frejmu, samo što ćeš zameniti nazive MC-a. Tako na 11. frejmu funkcija koja se poziva kada se klikne na taster "štampa" treba da sadrži sledeće:
Code:
function portfolio_podmenu1Click(event:MouseEvent):void
{
    with (MovieClip(parent).pagesMC)
    {
        if (stage.contains(o_namaMC))
        {
            removeChild(o_namaMC);
        }
        if (stage.contains(uslugeMC))
        {
            removeChild(uslugeMC);
        }
        if (! stage.contains(portfolioMC))
        {
            addChild(portfolioMC);
            portfolioMC.gotoAndPlay(2);
        }
        else
        {
            portfolioMC.gotoAndPlay(2);
        }
    }
}

U funkciji na 21. frejmu treba da dodaš sledeće:
Code:
function usluge_podmenu1Click(event:MouseEvent):void
{
    with (MovieClip(root).pagesMC)
    {
        if (stage.contains(o_namaMC))
        {
            removeChild(o_namaMC);
        }
        if (stage.contains(portfolioMC))
        {
            removeChild(portfolioMC);
        }
        if (! stage.contains(uslugeMC))
        {
            addChild(uslugeMC);
            uslugeMC.gotoAndPlay(2);
        }
        else
        {
            uslugeMC.gotoAndPlay(2);
        }
    }
}
[ aleksandar_vs @ 14.07.2011. 12:39 ] @
Super primer, jednostavno si objasnio koriscenje addChild() metode (barem ono osnovno) na prost i razumljiv nacin, i verujem da ce koristiti ne samo meni vec i ostalim pocetnicima koji ga budu procitali - hvala Bojane jos jednom.

Ono sto se meni sada namece kao logican korak (da ne bih za svaki podmeni svaki put pisao "removeChild()/addChild()" i to za svaki moguci meni koji se moze pojaviti (jer moze da ih ima na desetine-glavni meni + podmeniji), pa plus provera za svaki da li je otvoren itd.) je da se napravi neki upit, tj, da li moguce da se proveri koji je child otvoren i onda da se kaze nesto tipa "zatvori sve ostale" i startuj samo taj jedan koji je odabran... nesto tipa:


if (stage.contains("bilo koji child razlicit od" o_namaMC))
{
removeChild(sve otvorene);
else
{
addChild(o_namaMC);
o_namaMC.gotoAndPlay(2);


mozda pitam previse ali eto, palo mi na pamet


hvala u svakom slucaju

[ MenOfHonor @ 14.07.2011. 14:36 ] @
Ako želiš da ukloniš više MC-a odjednom onda je najbolje da ih staviš u jedan glavni MC čijim uklanjanjem nestaju i oni koji se nalaze u njemu. Evo ti jednostavan primer na koji način ovo funkcioniše: http://dhost.info/manofhonor/removeChild/removeChild.html. Na stage-u se nalaze 3 tastera i 3 MC-a; "glavniMC" u sebi sadrži 2 MC-a: "portfolioMC" i "uslugeMC". Prvi taster uklanja "portfolioMC", drugi uklanja "uslugeMC" a poslednji uklanja "glavniMC" (kao i oba MC-a koji se nalaze u njemu, ako već prethodno nisu uklonjeni). Na ovaj način mogu u "glavniMC" staviti proizvoljan broj MC-a i ukloniti ih u isto vreme uklanjanjem njihovog roditelja (u ovom slučaju to je "glavniMC"). Isto ih možeš i dodati (kada si ih naravno uklonio), samo što nije moguće dodati dete roditelja ukoliko se on ne nalazi u display listi. Znači da nije moguće dodati "portfolioMC" ili "uslugeMC" ako je "glavniMC" uklonjen. Iz ovog razloga sam onemogućio prva dva tastera kada je "glavniMC" uklonjen. Nadam se da ti je ovo pomoglo.