0

我想在一个物体撞到另一个物体时播放爆炸声。我这样做是为了当 hitTestObject 为真时,我运行这个函数

function createExplosion():void {
var explosion:Explosion = new Explosion(enemy.x, enemy.y);
this.parent.addChild(explosion);
}

爆炸类仅包括将输入设置为其 x 和 y 值。然后在爆炸影片剪辑中,我有几帧动画。它以具有以下代码的关键帧(即,作为该帧中的动作)结束:

stop();
this.parent.removeChild(this);

我的问题是。现在真的没了吗?我必须添加 stop() 才不会得到错误 1009。这让我怀疑某些事件计时器仍在运行?

4

1 回答 1

0

从显示列表中删除显示对象不会停止动画或将其从内存中删除。它只是将其从显示列表中删除。是的,您需要停止动画并删除可能对该对象处于活动状态的任何事件侦听器。

显示对象在被垃圾回收之前永远不会真正消失。但这不会发生,直到没有对该对象的引用仍然存在。因此,如果您有一个名为 explode 的变量引用您的显示对象,则需要在将其从显示列表中删除后将其设置为 null :

explosion.stop();   // stop the animation
removeChild(explosion);  // remove from display list
explosion = null; // remove variable reference
// explosion now qualifies for garbage collection.

请记住,这不会立即从内存中删除对象,它只是让垃圾收集器成为公平的游戏。您可以搜索“AS3 垃圾收集”以获取有关该过程的更多信息。

于 2013-04-06T00:24:14.477 回答