use*_*291 5 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
什么if (stage) init();意思?什么是Event.ADDED_TO_STAGE?为什么删除监听器init()?
小智 9
主类通常是一个文档类 - >作为第一个被放到舞台(显示树的根)的类.这意味着在构造函数(Main函数)中您已经可以访问stage.
if(stage) init();
Run Code Online (Sandbox Code Playgroud)
实际上意味着如果stage!= null,则运行初始化.
为什么在文档类中测试null?
如果你的swf被包裹到另一个瑞士法郎.您的主要功能将无法访问舞台,因为只有显示树(舞台上)上的精灵(电影剪辑等)才能访问舞台.
像这样:
var mc:MovieClip = new MovieClip();//mc.stage == null
stage.addChild(mc);//mc.stage != null
Run Code Online (Sandbox Code Playgroud)
因此,通过向ADDED_TO_STAGE添加一个侦听器,您将等待直到您实际访问stage,然后初始化它.您可以立即删除侦听器,因为您不再需要它.
这是文档(主)类中的常见情况,因为您需要阶段来添加菜单,介绍,无论是什么阶段,所以它是可见的.