从阵列AS3中删除MC

时间:2015-12-23 23:00:51

标签: actionscript-3 flash

我在从数组中删除MovieClip时遇到问题。

我收到此错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Spiker/loop()".

秒杀(Spiker)被删除,但错误仍然让我烦恼..不知道如何解决这个问题?

这是我的代码:

package  {

import flash.display.MovieClip;
import flash.events.Event;

public class Spiker extends MovieClip {

    public var spikeDirection:int = 1;
    private var removed = false;
    public function Spiker() {
        // constructor code
        trace("Spiker added");

        addEventListener(Event.ENTER_FRAME, loop);
    }
    private function loop (evt){
        this.x += spikeDirection * 10;

        for(var i:int = 0; i < this["parent"].enemyList.length; i++){
            if(removed == false){
                if(this["parent"].enemyList[i].hitTestObject(this)){
                    trace("Spikerhit");
                    removed = true;
                    remove(evt);
                }
            }
        }
    }
    public function remove (evt){
        removeEventListener(Event.ENTER_FRAME, loop);
        this["parent"].removeChild(this);
    }

}

1 个答案:

答案 0 :(得分:1)

你的问题来自你的for循环,这一行完全符合:

for(var i:int = 0; i < this["parent"].enemyList.length; i++){

因为当你的当前对象触及enemy时,它会从parent移除,并且对于for循环的下一次迭代(如果有的话),{{1是this["parent"]这就是为什么会发出错误,因为null循环正在验证每次迭代时确定循环何时结束的条件语句(for在你的情况下)。

为避免这种情况,您可以使用变量,例如,存储要在this["parent"].enemyList.length循环中使用的enemies的数量。

在删除对象后退出该循环,您也可以在for循环中使用break语句。

希望可以提供帮助。