当玩家触摸门时,应该添加下一级别并删除前一级别。然而,在游戏中,下一个级别确实会被添加,一切正常,但输出显示了这个问题。
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);
我认为这是因为孩子被移除了,这就是为什么存在空问题。但是如何解决输出中的这个错误呢?我是以错误的方式移除了动画片吗?
答案 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()
事件侦听器对象
希望可以提供帮助。