AS3 - 错误#1009:无法访问空对象引用的属性或方法

时间:2012-01-02 21:48:32

标签: actionscript-3

我正在制作一个游戏,如果敌人的子弹击中用户,子弹就会消失。一切都很好,除了我不断得到,

  

'错误#1009:无法访问null对象的属性或方法   参考'

一旦子弹击中用户(虽然子弹消失了)。它让我感到困惑,因为我在另一个完美的类中使用了几乎完全相同的代码。

package classes.enemy 
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
import classes.Main;

public class Bullet extends MovieClip
{
    var speed:Number;

    public function initialize()
    {
        var stageReff:Stage = this.stage as Stage;
        stage.addEventListener("enterFrame", enterFrame);
    }

    //code 

    function enterFrame(e:Event):void
    {
        this.x += speed;

        if(this.hitTestObject(Main.user))
        {
            removeEventListener("enterFrame", enterFrame);
            this.parent.removeChild(this);
            // line above gives the error.
        }
    }
}
}

我不知道可能出现什么问题。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

我的猜测是,它与你在舞台上添加一个输入帧事件监听器的事实有关,但是试图将它从监听对象本身中删除。

尝试更改

var stageReff:Stage = this.stage as Stage;
stage.addEventListener("enterFrame", enterFrame);

addEventListener("enterFrame", enterFrame);

答案 1 :(得分:0)

你不是从舞台上移除事件监听器,而是对象本身:)

我不建议这样做,在主游戏类中创建一个监听器,并在所有对象上调用更新函数!

答案 2 :(得分:0)

它失败的原因是因为你要从它的父母那里删除你的子弹。因此,当您引用this.parent时,它会返回null,因为根本就没有父级了。您正尝试删除ENTER_FRAME事件,但由于您在舞台上设置了原始ENTER_FRAME事件,因此该事件一直在运行。你可以简单地修复它:

if(this.x > 30)
{
    stage.removeEventListener("enterFrame", enterFrame);
    this.parent.removeChild(this);
}

但是就像@RasmusWriedtLarsen已经指出的那样,最好更全面地处理这些事件。并让父母处理删除Bullet