0

如果我的构造函数中没有以下内容,我的代码经常会出现问题:

addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);

一旦我在我的电影剪辑或文档类添加到舞台执行代码,它似乎工作得更好......但这是为什么呢?

4

2 回答 2

4

可以这样想:如果您的类正在构建,它可能来自一些看起来像这样的托管代码:

var newComponent = new TheComponent();
parentElement.addChild(newComponent)

因此,如果您在构造函数中执行代码,那么您正在执行的代码还没有完全连接起来。例如,您的构造函数中永远不会有父级,因为您还没有被添加到层次结构中。

当然,有些事情会起作用……例如,任何不依赖于可视化树一部分的代码都会起作用。但是,任何依赖于知道是更大系统一部分的代码都需要在添加到阶段后执行。

这有帮助吗?

于 2011-02-01T01:48:59.357 回答
1

添加到 Brian 的解释中,ADDED_TO_STAGE 可以使管理单个类中的对象更容易。通过让对象知道何时从该阶段添加和删除它,您可以让它完全管理它自己。比如说,在处理程序方法中启动动画或在移除时停止它。通常,如果没有该事件,您必须让对象将其添加到舞台开始和停止。

将事件框架视为一个自动化框架,它在广播特定事件时调用方法/函数。因为 ADDED_TO_STAGE 是在 addChild 方法中的对象上调度的,所以它类似于调用自定义方法 bind()。

package{
 class Main extends Sprite{
  public Main(){
   // called on instantiation.
  }
  public function bind():void{
   //called later in the stack, either by ADDED_TO_STAGE or main.bind()
  }
 }
}

这是因为这些属性 ( x,y,alpha ) 在 addChild 方法中被初始化。这样做是出于内存管理的原因。为什么要为在对象“到达”阶段之前不会被处理的东西分配一些位。

于 2011-02-01T02:34:35.750 回答