正在从阵列AS3中删除MC



从数组中删除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);
    }
}

您的问题来自for循环,这一行正是:

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

因为当当前对象接触到enemy时,它将从其parent中删除,对于for循环的下一次迭代(如果有),this["parent"]就是null,这就是为什么会触发该错误,因为for循环正在验证每次迭代的条件语句,该条件语句确定循环何时结束(在您的情况下为this["parent"].enemyList.length)。

为了避免这种情况,您可以使用一个变量,例如,存储要在for循环中使用的enemies的编号。

在移除对象后,还可以在for循环中使用break语句来退出该循环。

希望这能有所帮助。

最新更新