【问题标题】:When can you access a stage instance?什么时候可以访问阶段实例?
【发布时间】:2011-04-04 02:03:00
【问题描述】:

我正在使用 Flash CS5。我在主类中声明了我的舞台上的一些实例,我想将一些事件附加到它们,但是在主类构造函数时,这些实例被声明为 null。

访问阶段实例的最佳做法是什么?是否可以添加一个事件侦听器来告诉我何时填充了阶段实例属性?

简单示例:

  public class bleepBloop extends MovieClip {

    public var productName:TLFTextField;

    public function bleepBloop() {
      trace( productName ); // Here it is null
    }

  }

但是,当我稍后访问 productName 时,它​​已被定义。

【问题讨论】:

    标签: flash actionscript


    【解决方案1】:

    编辑:我回答了一个不同的问题...抱歉!希望这能回答您的实际问题。

    一旦您跳转到实际包含该子项的帧,就应该初始化 MovieClip 中的舞台实例:

    trace(productName); // will trace null if productName isn't on the current frame
    gotoAndStop(frameWithProductName);
    trace(productName); // should now be initialized (when publishing for Flash Player 10+)
    

    如果实例位于第 1 帧,则应立即在构造函数中对其进行初始化和访问。否则,一种解决方案是放置一些时间线代码,将所需的侦听器添加到实例出现的帧上。请注意,这些实例实际上是在它们消失和重新出现时重新创建的(当您离开并重新进入该帧时),因此在这种情况下您必须读取您的侦听器。将侦听器代码放在该帧上即可解决此问题。

    或者,您可以监听您感兴趣的特定对象何时触发 ADDED_TO_STAGE 事件:

    public function bleepBloop() {
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, true); // true to listen for children (capture phase)
    }
    
    private function onAddedToStage(event:Event):void {
        if(event.target == productName) {
            // add listeners
        }
    }
    

    【讨论】:

    • 是的。我所做的每个项目都有一个“addedToStageHandler(e:Event)”,我将其视为实际的启动点。那时您就知道您的应用已完全启动并正在运行。
    • 在我看来,删除ADDED_TO_STAGE 处理程序中的侦听器是该过程中最重要的部分。如果不这样做,您将收到对处理程序的多次调用,这些调用将通过应用程序结构向下渗透并混淆外部人员。
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2011-02-24
    • 2019-06-13
    相关资源
    最近更新 更多