as3 - 错误#1009,一个对象为null并且带有计时器错误

时间:2015-12-17 13:00:50

标签: actionscript-3

当玩家触摸门时,应该添加下一级别并删除前一级别。然而,在游戏中,下一个级别确实会被添加,一切正常,但输出显示了这个问题。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.utils::Timer/tick()

这是enterframe:

if (player.collisionArea.hitTestObject(door0))
        {
            var timer: Timer = new Timer(1000, 1);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE, fade);
            timer.reset();
            timer.start();
        }

这是计时器:

function fade(event: TimerEvent)
    {
        removeEventListener(TimerEvent.TIMER_COMPLETE, fade);

        var pageTwo: PageTwo = new PageTwo;
        parent.addChild(pageTwo);
        this.parent.removeChild(this);

    }

这是“上一级”课程。 “this”本身(上一级)和“pageTwo”是(下一级)。

因此,输出表明错误位于“parent.addChild(pageTwo);”。但是,如果我删除它,输出表明问题来自“this.parent.removeChild(this);

我认为这是因为孩子被移除了,这就是为什么存在空问题。但是如何解决输出中的这个错误呢?我是以错误的方式移除了动画片吗?

1 个答案:

答案 0 :(得分:1)

你的问题来自这条线:

com.android.tools.build:gradle:2.0.0-alpha3

因为在你的代码中这个条件

parent.addChild(pageTwo);

是的,您将创建另一个if (player.collisionArea.hitTestObject(door0)) 对象,当其Timer事件被触发时,它会尝试将新的TimerEvent.TIMER_COMPLETE实例添加到PageTwo父级并且这就是错误被解雇的原因。

为避免这种情况,您可以在该条件为真时首次删除null事件侦听器,或者如果您仍需要它(Event.ENTER_FRAME事件侦听器),则必须验证您的条件避免这种行为。

此外,您的Event.ENTER_FRAME var应声明为全局,以便可以从timer函数访问,以便能够删除您尝试从当前删除的fade()事件侦听器对象

希望可以提供帮助。