当玩家触摸门时,应该添加下一个级别,并删除上一个级别。然而,在游戏中,下一个级别确实被添加了,一切都正常,但输出显示了这个问题。
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()
这是输入框:
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);
我想这是因为孩子被移除了,这就是为什么会出现无效问题。但是我该如何解决输出中的错误呢?我是不是把电影胶片移错了?
您的问题来自以下行:
parent.addChild(pageTwo);
因为在你的代码中作为这种条件
if (player.collisionArea.hitTestObject(door0))
如果为true,您将创建另一个Timer
对象,当其TimerEvent.TIMER_COMPLETE
事件被激发时,它将尝试向null
父对象添加一个新的PageTwo
实例,这就是激发错误的原因。
因此,为了避免这种情况,您可以在条件为true时第一次删除Event.ENTER_FRAME
事件侦听器,或者如果您仍然需要它(Event.ENTER_FRAME
事件侦听器),则必须验证您的条件以避免这种行为。
此外,您的timer
变量应声明为全局变量,以便可以从fade()
函数中访问,以便能够从当前对象中删除它的TimerEvent.TIMER_COMPLETE
事件侦听器。
希望这能有所帮助。