0

这是交易,我有一个从 .fla 文件调用的 Main 类。一切正常,直到我在库中设置一个对象“为 actionscript 导出”......之后舞台不再工作,舞台现在返回“null”,只是因为我检查了一个对象以“为 actionscript 导出”。

我正在使用 flash cs5,但早期版本的 flash 从来没有发生在我身上。

对不起英语......我希望我足够清楚。

代码示例:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        trace(stage)// traced null 
    }
}
}

我将尝试解释我所做的步骤。- 创建那个Teste类;- 打开 .fla 文件,并在 .fla 文件的 Property 的 Class 字段中添加该 Class;- 创建和 MovieClip 并尝试从 Actionscript 中导出它;问题来了……当我这样做时,舞台现在返回 Null,只是因为我在库中导出了一个 MovieClip。oO

4

2 回答 2

1

原因是 Stage 可能在没有太多要加载的情况下立即可用。现在您已经为 Actionscript 添加了要导出的内容,加载甚至可能需要多毫秒的时间,并且阶段将不可用。

始终检查阶段是否存在,然后在尝试引用它之前等待它存在。

尝试这个:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        if(!stage) addEventListener(Event.ADDED_TO_STAGE, _addedToStage)
        else _addedToStage();
    }

    private function _addedToStage(e:Event = null)
    {
        trace(stage)// traced null 
    }
}
}
于 2011-07-21T18:20:32.533 回答
0

如果那是您的文档类,那么该代码很有可能在阶段对象存在之前进行初始化。我只是在猜测,但我希望行为的变化是由您的“导出动作脚本”类在第一帧加载它们的定义并导致某种形式的延迟引起的。

尝试等待阶段存在:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        if(stage) {
            init();
        } else {
            addEventListener(Event.ADDED_TO_STAGE,init);
        }
    }

    private function init(evt:Event = null):void {
        removeEventListener(Event.ADDED_TO_STAGE,init);
        //stage should now exist
        trace(stage);
    }
}
}
于 2011-07-21T18:23:00.770 回答