gpt4 book ai didi

flash - "if (stage) init();"在 ActionScript 中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 17:41:28 25 4
gpt4 key购买 nike

我正在使用 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() 中的监听器?

最佳答案

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

if(stage) init();

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

为什么在文档类中测试 null?
如果您的 swf get 包含在另一个 swf 中。您的 Main 函数还不能访问舞台,因为只有显示树(舞台上)上的 Sprite (电影剪辑等)才能访问舞台。
像这样:
var mc:MovieClip = new MovieClip();//mc.stage == null
stage.addChild(mc);//mc.stage != null

因此,通过向 ADDED_TO_STAGE 添加监听器,您正在等待直到您真正可以访问舞台,然后再初始化它。您立即删除监听器,因为您不再需要它了。

这是文档(主)类中的常见情况,因为您需要 stage 来添加您的菜单、介绍、任何要 stage 的内容,因此它是可见的。

关于flash - "if (stage) init();"在 ActionScript 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com