Autor Zpráva
Hathor
Profil *
Dobry den
duplikujem mc ,v ktorom sa nachadzaju mnohe mc ,teda vnorene jeden v druhom {napriklad _root.mc.a.b}
a na jeho vymazanie po urcitej dobe {na urcitom snimku vo vnorenom movieclipe} je script:

removeMovieClip(this._parent); //zameranie sedi , nehladajte chybu v zlom adresovani tu!!!

...a teraz moj problem, duplikujem tento MC viac krat ,a mal by sa odstranit , ALE neodstranuje sa , lenze aj ANO ,takze pozorne citajte:

pri prvom zduplikovani ked sa dostane na dany snimok , tak sa neodstrani
pri druhom az dalsom sa niekedy (,asi na 80%) odstrani ,ale niekedy skratka "lagne" ,a miesto toho aby sa sam seba odstranil na poslednom snimku , normalne pokracuje prvym , ako by tam prikaz removeMovieClip ani len nebol,a takto stale dookola

jednotlive zduplikovana MC sa {podla isteho pravidla} vymienaju , teda menia svoju "layer" ,....cez Swapdepths
,som tym uplne fascinovany , preco to nejde odstranit , moj nazor je ze chyba je v "zamerani MC" ,teda v:

removeMovieClip(this._parent); //this._parent --sam seba nevie zamerat {mozno preto ze MC meni svoju layer {viem ,nemalo by tomu byt tak , malo by to zamerat bez ohladu na layer , ale toto je jeden z jedinych pricin ,ktore ma napadaju}

...len tak dodam , ze jednotlive mc sa duplikuju s cislami mc1 , mc2 , mc3 ,a pozeral som debugger , duplikovalo sa 6 mc1,mc2...mc6

mc1 ,ked prisiel na posledny snimok {kde bol umiestneny removeMovieClip} ,neodstranil sam seba ,a skocil na 1 snimok
mc2 , - || - ...tak sa v pohode odstranil , a z debugera zmizla cela jeho struktura , takze sa odstranenie podarilo
mc3 , - || - ...tak sa v pohode odstranil , a z debugera zmizla cela jeho struktura , takze sa odstranenie podarilo
mc4 , - || - ...tak sa v pohode odstranil , a z debugera zmizla cela jeho struktura , takze sa odstranenie podarilo
mc5 ,ked prisiel na posledny snimok {kde bol umiestneny removeMovieClip} ,neodstranil sam seba ,a skocil na 1 snimok
mc6 , - || - ...tak sa v pohode odstranil , a z debugera zmizla cela jeho struktura , takze sa odstranenie podarilo

...podla mna v tom urcite maju nieco spolocne layeri ,neviem vsak ako ,ale nezda sa mi to ze by mc sameho seba nedokazzalo zamerat

...btw tento problem riesim uz zopar dni , takze osobne vylucujem nejaku nepozornostnu chybu v AS.

ak by niekto vedel akokolvek poradit , preco by tomu mohlo byt tak ,pls napiste ,diky
XXX
Profil
Asi by to chtelo videt cely skript, tezko rict, kde je chyba. Muzeme to tady dlouho resit a pak se zjisti, zes mel treba jen spatne pojmenovane instance nebo nejakou jinou chybu, kterou si prehledl a na kterou tady my nemuzeme prijit.Kazdopadne to zkusil vyresit jinym zpusobem, at vidis, jestli je ta chyba jen tim skriptem na poslednim snimku. Smaz ten skript z posledniho snimku a vytvor skript, ktery toho sameho dosahne primo z hlavni casove osy, na ktere duplikujes ty MC. Kazdemu snimku prirad zpracovatele udalosti onEnterFrame, vytvor si nejakou promennou, kterou budes postupne zvysovat o jednicku v kazdem snimku, dokud se nebude rovnat snimku, ktery je posledni v tom duplikovanem MC a jakmile se bude hodnota rovnat, odstran tento MC metodou removeMovieClip(), ktera bude prirazena primo konkretnimu MC, tedy tomu novemu zduplikovanemu ;) Takhle ti to musi urcite fungovat ;)
Hathor
Profil *
To co si napisal som aj skusil ale na moje ocakavanie to aj tak neslo , skratka vypisy prebiehali ocakavane az na removemovieclip ,ktory ako keby tam ten riadok kodu ani nebol.

...povodne som sem chcel napisat kod ,ktory sa stara o duplikovanie ,ci vymenu MC ,avsak jedna sa o zlozitejsi kod s externe nacitavanymi objektami ,a ide o dlhsi kod ,ktory by ta skor domotal , mozes mi verit ,ze som to prekontroloval viackrat ,aj otestoval ,
chyba je mozno vo vymienani MC medzi layermi ...som pozeral clanky s tym spojene na fore a nasiel som :

http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=21&topic=3 0130

..imho ide o podobny problem , kde skratka flash nevie zamerat objekt ,ked sa nachadza na istom layeri.
XXX
Profil
Vsechno se da ve Flashi nejak obejit. Jeste si zkus u tech duplikovanych MC pridat do toho skriptu na misto, kde mas radek removeMovieClip() pred tento radek:

trace(this.getDepth());


at vidis, jestli ti to nehazi nejake silene cisla. Nevim, jak mas tu aplikaci rozsahlou, ale pokud by byla pravda, ze by byl Flash schopen odstranovat MC jen do nejake hranice urovne, pak staci vytvorit si treba prazdny MC, kteremu se priradi treba uroven 10 a pokazde, kdyz budes chtit urcity MC odstranit metodou removeMovieClip() prohodis metodou swapDepths() tyto dva MC, teprve potom smazes ten zduplikovany a pote nastavis tomu prazdnemu znova uroven 10 metodou swapDepths(10), abys to mohl aplikovat dale u dalsich MC ;)
Hathor
Profil *
...jj prave som na to prisiel ,Flash nedokaze odstranit MC ktore ma velku minusovu uroven ,uz je hned jasne ,ze kde je chyba :

pri duplikovani samozrejme s _root.getNextHighestDepth() ...mali vzdy hlbku 1,2,3 ... ,ale neduplikovany objekt mal -16374 , keby to takto ostalo ,tak by vsetko fungovalo , aj removemovieclip ,lenze kedze sa na zaciatku vymenil prvy duplikovany MC s depth napriklad 1 s povodnym , nedupliknutym ,co mal -16374 ,tak sice nedupliknuty mal depth 1 ,co mu nevadi ,ale dupliknnuty mal -16374 ,co uz flash nevie odstranit ,cize vsetko vyriesene , fakt moc dik ,zanietene si skumal dovod spolu so mnou , a prisli sme na neho v podstate naraz ...pred 10 minutami som pustal testy ,ktore to potvrdili , heh takze sme na to prisli v ten isty okamih naraz :D , este raz diky ,pekny den
XXX
Profil
No kdybys napsal hned, ze odstanujes i takovy, ktery si neduplikoval, tak bych ti to vyresil hned :)) Teoreticky se v dokumentacich totiz uvadi, ze removeMovieClip se da pouzit jen u MC, ktere jsou vytvorene dynamicky. U tech vytvorenych rucne ne. Ve skutecnosti jde vsak opravdu o to, ze jakykoliv objekt, ktery vytvoris rucne na pracovni plose ma zapornou uroven a staci mu nastavit uroven kladnou a v tom okamziku jde odstranit kazdy objekt, jak si napsal ;) Jen jsem si myslel, ze kdyz duplikujes MC, tak musis mit vsechny hodnoty kladne ;)
Hathor
Profil *
...hmm ja som sa nikdy nepokusal odstranit ne-duplikovane ,alebo ne-attahnute MC
,jednotlive MC sa duplikovali s hlavneho MC ,ktore si taktiez s nim menili layer{hlbku,vrstvu,hladinu ..nevim ako to volat ,ked to kazdy vola inak} ,a preto sa "zly layer" ako virus siril medzi duplikaciami cez .swapDepths() ,a znemoznoval ich odstranenie

..ok tot cele ,len ma zaujal: "jakykoliv objekt, ktery vytvoris rucne na pracovni plose ma zapornou uroven a staci mu nastavit uroven kladnou a v tom okamziku jde odstranit kazdy objekt" ..len by ma zaujimalo ako nastavit layer priamo? ...nikde som totiz nevidel ,aby si menil hlbku layeru rucne , ved o to sa stara flash pri kompilovani.

..moj problem som vyriesil jednoducho {v skratke na zaciatku zduplikujem MC na vrstvu cca 1 ,a vymenim ho s MC na vrstve cca -16000 ,ked uz su vymenene ,tak skratka zmazem MC na -16000 ,a neduplikovane MC je zrazu na vrstve cca 1,teda vymena medzi MC prebieha v pohode} ,skratka narychlo som toto pridal na zaciatok "onclipEventLoad"-u a vsetko OK :

duplicateMovieClip(_root.tuz, "tuz"+_root.riadiaci_objekt.poc_duplikaciji_tuz, _root.getNextHighestDepth() );
this.swapDepths(eval("_root.tuz"+_root.riadiaci_objekt.poc_duplikacij i_tuz));
trace("layer mainu uspesne vymeneny na= "+this.getDepth()+" "+eval("_root.tuz"+_root.riadiaci_objekt.poc_duplikaciji_tuz).getDepth ());
eval("_root.tuz"+_root.riadiaci_objekt.poc_duplikaciji_tuz).removeMov ieClip();
_root.riadiaci_objekt.poc_duplikaciji_tuz++;
if (eval("_root.tuz"+_root.riadiaci_objekt.poc_duplikaciji_tuz).getDepth( )==undefined) {
trace("pomocny duplikat pre vymenu layeru mainu uz neexistuje!");
} else {
trace("chyba...,riadok cca 312");
}
XXX
Profil
Metoda swapDepths() neslouzi jen k prohozeni urovni dvou MC, ale pokud misto druheho MC zadas primo hodnotu urovne, nastavis tak primo MC konkretni uroven. V pripade, ze je tato uroven uz obsazena, premaze se prvek na teto urovni timto novym. Na to si to chce davat pozor. Konkretne:

mc1_mc.swapDepths(mc2_mc);

tento radek prohodi urovne dvou MC, zatimco tento

mc1_mc.swapDepths(10);

nastavi uroven MC mc1_mc na 10
Hathor
Profil *
jj dik , o tom som skutocne nevedel , som si vzdy myslel ze ako vstupnu hodnotu je nutne zadat objekt ,a ono si to z toho vytiahne {,ale aspom mam dokaz ze nevedomky som uz plne zamerany na ObjektovoOrientovaneProgramovanie } ;D
XXX
Profil
jj, nevedomky je lepsi nez vubec ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0