【问题标题】:What does "if (stage) init();" mean in ActionScript?"if (stage) init();" 是什么意思?在 ActionScript 中是什么意思?
【发布时间】:2010-06-06 21:12:54
【问题描述】:

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

【问题讨论】:

  • 我很惊讶这里还没有看到答案,所以在你等待的时候:如果你搜索“Event.ADDED_TO_STAGE”,你会得到一些有趣的阅读,我怀疑它会回答你的问题。 (我不确定,我不在 ActionScript 中工作;这就是为什么这不是答案。但链接看起来很准确。)在我看来,聚合效果是确保 @987654324 @ 仅在您的组件处于“舞台”时才被调用:如果您已经是,则立即调用它。如果不是,则为在您上台时触发的事件连接一个侦听器(然后在调用时将其删除)。
  • 只有一个答案,但很好:)

标签: flash actionscript-3


【解决方案1】:

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

if(stage) init();

其实就是如果stage != null,运行初始化。

为什么要在文档类中测试 null?
如果您的 swf 被包裹到另一个 swf 中。您的 Main 函数还不能访问舞台,因为只有显示树(舞台上)上的精灵(电影剪辑等)才能访问舞台。
像这样:

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

因此,通过向 ADDED_TO_STAGE 添加一个侦听器,您将等到您真正可以访问阶段,然后再初始化它。你立即移除了监听器,因为你不再需要它了。

这是文档(主)类中常见的情况,因为你需要舞台来添加你的菜单,介绍,任何舞台,所以它是可见的。

【讨论】:

  • 值得指出的是,这通常不是必需的。如果有问题的类需要创建一个根级别的键事件侦听器,那么它将需要一个阶段引用。但是如果你的类实际上不需要任何阶段引用,那么这种代码就没有什么特别的原因(除了可能是一种惰性初始化)。
  • @fenomas true,但根据我的经验,我从未见过不需要参考阶段的主类。你总是需要在舞台上添加一些东西,因为没有其他方法可以展示一些东西。
  • @Antriel:一般来说,一个类应该将它的显示组件添加到它自己,这样它就可以在其他上下文中被重用。如果您直接在舞台上添加孩子,那么您使用的是事实上的全局变量。
  • 非常感谢,这真的是一个很好的答案,特别是因为我在谷歌上的任何地方都找不到这种清晰的解释。
  • 这个问题真是救命啊!即使在您(Antriel)回答之后,我仍然不完全确定为什么要使用它。有什么方法可以确定我是否必须使用它?像,如果我在进入舞台之前初始化我的东西有什么错误吗?或者如果我在进入舞台之前初始化我的东西会发生什么。 Fenomas,通过向类本身添加显示组件,您的意思是: addChild(); ?在 addChild() 之前没有舞台参考?
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 2011-04-26
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多