我们有一个复杂的AS3项目,可以加载各种外部文件。我们发现,一旦发生这种情况,gotoAndStop命令(不一定在外部加载的文件上)会触发我们附加到主时间轴的EnterFrame事件。这导致了一些非常奇怪的结果,偶尔会完成崩溃。
我们发现的示例向我们展示了我们遇到的问题:
(一个地方的代码)
trace("goto 1")
tClip.gotoAndStop("on")
trace("goto 1 done")
(其他地方的代码)
trace("goto 2")
tClip2.gotoAndStop("off")
trace("goto 2 done")
输出:
//goto 1
//goto 2
//goto 2 done
//goto 1 done
请注意,如果我们之前已经下载了一些外部文件,则此行为似乎只会发生。否则我们得到
输出:
//goto 1
//goto 1 done
//goto 2
//goto 2 done
正如我们所期望的那样。
我们提出的工作方法是将所有gotoAndStop命令放入一个新函数中:
package {
public function fGoToFrame(tClip:MovieClip, tFrame:*):void {
pIgnoreFrameEventFromGoToAndStop = true;
tClip.gotoAndStop(tFrame);
pIgnoreFrameEventFromGoToAndStop = false;
}
// frame event:
public function fAction(e:Event):void {
if (! pIgnoreFrameEventFromGoToAndStop)
{
//...
}
}
}
这似乎可以防止任何错误,但它并不完全令人满意。我想知道为什么gotoAndStop在子movieClip上根本就会在根sprite上触发一个帧事件!有没有办法在不使用这个黑客的情况下阻止它?