[Flash8] removeMovieClip() krijg 't niet voor elkaar

Pagina: 1
Acties:

  • KolNedra
  • Registratie: September 2001
  • Laatst online: 18-04-2020
Moest een presentatie maken in flash waarvan de opbouw en inhoud compleet dmv XML wordt aangeroepen
Dus buttons en wat dan allemaal niet meer wordt in xml aangegeven.
Het werkt allemaal perfect, op 1 ding na; het verwijderen van bepaalde movieclips:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function verwijder(vw) {
           // HIERONDER GEEFT HIJ DIT WEER: 
           // Daadwerkelijk verwijderen van :_level0.gemaakteAnimatie (movieclip)

           trace("Daadwerkelijk verwijderen van :"+eval("_root.verwijderNaam"+vw)+" ("+typeof(eval("_root.verwijderNaam"+vw))+")");

           eval("_root.verwijderNaam"+vw)._alpha = 10;

           // Probeer het op 4 "verschillende" manier, maar nix werkt
           _root.removeMovieClip(eval("_root.verwijderNaam"+vw));
           eval("_root.verwijderNaam"+vw).removeMovieClip();
           _root[eval("_root.verwijderNaam"+vw)].removeMovieClip();
           _root["_root.verwijderNaam"+vw].removeMovieClip();
}
Wat gebeurd er nu precies?
ik heb ergens anders in de code set("_root.verwijderNaam"+vw,naam); gedaan, en "naam" verwijst naar een dynamisch aangemaakte movieclip.
Deze bestaat wel degelijk want als ik hem wil "verwijderen" in bovenstaande functie veranderd hij (als test) de _alpha naar 10%, maar hij verwijderd hem dus NIET.

Geen idee wat ik mis doe, iemand die ziet of weet wat er mis mee is?

En als "oplossing" de alpha op 0% zetten is niet wat ik zoek, want dan blijft de movieClip nog steeds playen, waardoor bij een later stadium in de presentatie teveel movieclips op de "achtergrond" draaien wat teveel CPU kost

[ Voor 22% gewijzigd door KolNedra op 22-11-2005 14:12 ]

::: flickr.com/kolnedra ::: Nikon D80 + Sigma 18-200mm f/3.5-6.3 DC + Sigma 10-20mm f/4-5.6 EX DC HSM


Verwijderd

Eval, _root, this[], set ... 8)7

Je code is echt enorm vies.
Wanneer je MovieClips aanmaakt met een variabele naam, zet deze dan in een array:

Flash ActionScript:
1
2
3
var myList:Array = new Array;
for ( var i:Number = 0; i < 10; i++ )
    myList.push ( this.attachMovieClip ( "myMC", "myMC" + i, this.getNextHighestDepth () );


Je kunt nu dmv. van de index je movieclip aanroepen:

Flash ActionScript:
1
myList[ 4 ].removeMovieClip ();


In jouw "vieze" geval:

Flash ActionScript:
1
2
var myName:String = "_root.verwijderNaam"+ vw;
_root[ myName ].removeMovieClip();


Overigens snap ik niet dat je verwijst naar je root? :| Je stuurt toch een functie aan, waarom geef je dan niet de naam van de MovieClip mee aan deze functie ipv. hem te zetten in je _root. Nu blijft de reference (ondanks dat de mc is verwijderd) onnodig in je _root staan, wat ook weer onnodig CPU kost (ja, je begint er zelf over)

Waarom gebruik je btw. eerst set () en daarna _root[]?

Ik krijg sterk de indruk dat je niet weet waarmee je bezig bent.

[ Voor 63% gewijzigd door Verwijderd op 22-11-2005 14:17 ]


  • sanderb
  • Registratie: November 2000
  • Laatst online: 03:22
buiten alles wat flashAddict hierboven zegt (en volkomen gelijk in heeft..) wil flash wel eens moeite hebben met removeMovieClip op movieclips die dynamisch zijn aangemaakt en met getNextHighestDepth op een diepte gezet zijn.
de te verwijderen movieClip met swapdepth(999) eerst een andere depth geven en dan pas verwijderen wil voor dat probleem nog wel eens helpen.

Maar ga eerst maar proberen wat flashaddict je net allemaal verteld heeft

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams