对基于帧的对象的无效引用
有时 gotoAndStop()
在代码中间调用,引用一些基于帧的属性。但是,**在更改帧之后,**所有当前帧上存在的属性的链接都将失效,因此任何涉及它们的处理都应立即终止。
这种处理有两种一般情况:首先,在 gotoAndStop()
调用之后循环不会结束,如下所示:
for each (bullet in bullets) {
if (player.hitTestObject(bullet)) gotoAndStop("gameOver");
}
这里,1009 错误意味着 player
MC 在处理 gotoAndStop()
调用时被破坏,但循环继续,并引用 now-null 链接从中获取 hitTestObject()
。如果条件会改为 if (bullet.hitTestObject(player))
,则错误将是#2007“参数 hitTestObject 不能为空”。解决方案是在调用 gotoAndStop()
之后立即发表一个 return
声明。
第二种情况是同一事件上的多个事件侦听器。像这样:
stage.addEventListener(Event.ENTER_FRAME,func1);
stage.addEventListener(Event.ENTER_FRAME,func2);
function func1(e:Event):void {
if (condition()) {
gotoAndStop(2);
}
}
这里,如果 condition()
为 true,则第一个侦听器将执行 gotoAndStop()
,但第二个侦听器仍将被执行,如果该侦听器引用该帧上的对象,则将抛出 1009 错误。解决方案是避免单个事件上的多个侦听器,在单个对象中,最好有一个侦听器处理该事件的所有情况,并且如果需要更改帧,则可以正确终止。