从阵列 AS3 中删除 MC

Removing MC from array AS3

我在从数组中删除 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 语句退出该循环。

希望能帮到你。