J'ai un petit sprite qui est la "traînée de fumée" derrière un missile dans une animation flash. J'ai fait une classe autonome pour gérer la création et la suppression de lui-même:EventListeners s'enregistrant eux-mêmes?
public class Spark extends Sprite {
private var lifetime:Number = 15;
private var gfxRef:MovieClip = new fx_particleTrail();
private var canvas:Sprite;
public function Spark(x:Number, y:Number, to:Sprite) {
gfxRef.x = x;
gfxRef.y = y;
canvas = to;
canvas.addChild(gfxRef);
addEventListener(Event.ENTER_FRAME, tick);
}
private function tick(e:Event):void {
lifetime --;
gfxRef.alpha -= 0.05;
if (lifetime <= 0) {
gfxRef.alpha = 0;
removeEventListener(Event.ENTER_FRAME, tick);
canvas.removeChild(gfxRef);
gfxRef = null;
}
}
}
Tout semble fonctionner très bien - je ne peux pas tracer des erreurs de cette routine. Cependant, parfois une étincelle restera collée à l'écran pour toujours - le compteur de durée de vie s'arrête à un certain nombre et ne progresse jamais. C'est comme si le EventListener venait de décider d'abandonner le fantôme. Je suis assez sûr que ce n'est pas l'initialisation car ils vont échouer dans divers états d'Alpha-tude, indiquant qu'il y a une panne de masse à un moment ou un autre.
Je pensais que peut-être générer tant à la fois était un problème, mais je truqué pour générer un seul - et je jeté quelques traces:
> Born
> 15
> 14
> 13
> 12
Et elle se termine là. L'écouteur d'événement a été placé et il s'est simplement arrêté pour une raison quelconque! S
Cela fonctionne avec FlexSDK dans AS3/Bloc-notes (n'utilisant pas l'environnement de développement Flash).
Aide!
Peut-être le questionneur pourrait-il afficher son projet, s'il se sent à l'aise de le faire? – aaaidan
Hm, vous semblez absolument raison! On dirait que le contenu de la classe a été récupéré un peu plus tôt. Merci pour les conseils! –