什么是“if(stage)init();”在ActionScript中意味着什么?

时间:2010-06-06 21:12:54

标签: flash actionscript-3

我正在用FlashDevelop创建我的第一个AS3,我不明白构造函数中指令的含义:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {

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

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
        }

    }

}

if (stage) init();是什么意思?什么是Event.ADDED_TO_STAGE?为什么要删除init()中的监听器?

1 个答案:

答案 0 :(得分:9)

主类通常是文档类 - >作为第一个被放到舞台(显示树的根)的类。这意味着在构造函数(Main函数)中,您已经可以访问stage。

if(stage) init();

实际上意味着如果stage!= null,则运行初始化。

为什么在文档类中测试null? 如果你的swf被包裹到另一个瑞士法郎。您的主要功能将无法访问舞台,因为只有显示树(舞台上)的精灵(电影剪辑等)才能访问舞台。
像这样:

var mc:MovieClip = new MovieClip();//mc.stage == null
stage.addChild(mc);//mc.stage != null

因此,通过向ADDED_TO_STAGE添加一个侦听器,您将等待直到您实际访问stage,然后启动它。您可以立即删除侦听器,因为您不再需要它。

这是文档(主)类中的常见情况,因为您需要阶段来添加菜单,介绍,无论是什么阶段,所以它是可见的。