【发布时间】:2009-08-16 08:32:30
【问题描述】:
我有一个小精灵,它是 Flash 动画中导弹后面的“烟雾轨迹”。我创建了一个独立的类来处理自身的创建和删除:
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;
}
}
}
似乎一切正常 - 我无法从这个例程中追踪任何错误。然而,有时一个火花会永远粘在屏幕上——生命周期计数器停在某个数字上,永远不会前进。就好像 EventListener 刚刚决定放弃幽灵一样。
我很确定这不是初始化,因为它们会在 Alpha-tude 的各种状态下失败,这表明在某个时刻存在大规模失败。
我认为可能一次生成这么多是一个问题,但我操纵它来生成一个 - 我扔了一些痕迹:
> Born
> 15
> 14
> 13
> 12
到此为止。放置了事件监听器,但由于某种原因它刚刚停止!s
这适用于 AS3/记事本中的 FlexSDK(不使用 Flash 开发环境)。
救命!
【问题讨论】:
标签: flash actionscript-3 event-handling