舞台不可用

有时开发人员会编写一些需要访问 stage 或 Flash 阶段的代码来添加监听器。它可以第一次工作,然后突然无法工作并产生错误 1009.有问题的代码甚至可以在时间轴上,因为它是第一个在那里添加代码的主动,并且许多教程仍然存在使用时间轴代码层放置代码。

public class Main extends MovieClip {
    public function Main() {
        stage.addEventListener(Event.ENTER_FRAME,update); // here

这段代码不起作用的原因很简单:首先实例化一个显示对象,然后将其添加到显示列表中,当它不在显示列表中时,stage 为空。

如果代码像这样更糟糕:

stage.addEventListener(Event.ENTER_FRAME,update); // here

被放置在时间轴上。它甚至可以工作一段时间,而 Main 对象通过 GUI 打到舞台上。然后,他们的 SWF 从另一个 SWF 加载,突然代码中断。发生这种情况是因为当玩家直接加载 SWF 并且异步处理加载时,Main 的帧以不同的方式构造。解决方案是使用 Event.ADDED_TO_STAGE 监听器,并将所有解决阶段的代码放入其中,并将监听器本身放入 AS 文件而不是时间轴。