2011-02-01 53 views
0

我经常跟我的代码问题,如果我没有在我的构造函数如下:为什么Event.ADDED_TO_STAGE

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

一旦我执行代码我的影片剪辑或文档类已添加到舞台,它似乎更好......但为什么呢?

回答

4

认为它是这样的:如果正在构建的类,它可能是从一些托管的代码看起来是这样的:

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

所以,如果你是在构造函数中执行代码时,你是执行尚未完全连线的代码。例如,您将永远不会在构造函数中拥有父项,因为您尚未添加到层次结构中。

当然,有些东西是可行的......例如,任何不依赖于可视化树的代码都可以工作。但是,任何依赖于知道它是更大系统的一部分的代码都需要在它添加到舞台后执行。

这有帮助吗?

+0

我想我得到这个......但是说,什么是视觉树的一部分最常见的东西? MovieClip属性,x,y,alpha ...是这些东西,直到一个对象被添加到舞台才能工作? – redconservatory 2011-02-01 01:59:16

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,阿尔法)在该方法的addChild被初始化。这是出于内存管理的原因。为什么要分配一些东西,直到物体“撞击”舞台才会被处理。