如何在AS3中有效地进行垃圾收集

时间:2013-04-04 04:51:59

标签: arrays actionscript-3

我正在构建一个Flash游戏,我正在建立一个阵列,跟踪屏幕上的一堆电源。当玩家进行抓取时,它需要从屏幕上消失(这很容易)但是它也需要从阵列中移除,以便碰撞检测循环不会变得非常麻烦。我尝试使用splice,但我一直得到null引用错误,这是相关的代码。

public function collect():void {
            try {
                Main.powerUps.splice(index, 1);
                stage.removeChild(this);
            }catch (e:Error) {
                trace("Error in splice");
            }
        }
}

然后当我创建我的PowerUp对象时,我传递一个参数,该参数被分配给index,这是当时Power Ups数组的长度。任何人都可以看到这个代码有什么问题或(最好)提供更优雅的解决方案吗?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

优雅的解决方案:一起使用indexOf()splice()

var index:int = Main.powerUps.indexOf( powerup );
Main.powerUps.splice(index, 1);

其中powerup是对数组Main.powerUps中存储的对象的引用。

我还创建了一个可能对你有用的小课:

它有一个.remove()方法,所以你可以这样做:

powerUps.remove(powerup);