我正在用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()
中的监听器?
答案 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,然后启动它。您可以立即删除侦听器,因为您不再需要它。
这是文档(主)类中的常见情况,因为您需要阶段来添加菜单,介绍,无论是什么阶段,所以它是可见的。