如果我的构造函数中没有以下内容,我的代码经常出现问题:
addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
在我的MovieClip或文档类添加到舞台后执行代码后,它似乎工作得更好......但为什么会这样?
答案 0 :(得分:4)
按照这种方式思考:如果你的类正在构建,那么它可能来自某些看起来像这样的托管代码:
var newComponent = new TheComponent();
parentElement.addChild(newComponent)
因此,如果您在构造函数中执行代码,那么您正在执行尚未完全连接的代码。例如,您的构造函数中永远不会有父项,因为您尚未将其添加到层次结构中。
当然,有些东西会起作用......例如,任何不依赖于视觉树一部分的代码都可以工作。但是,任何依赖于知道更大系统一部分的代码都需要在它被添加到舞台后执行。
这有帮助吗?
答案 1 :(得分: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()
}
}
}
这是因为在addChild方法中初始化了那些属性(x,y,alpha)。这是出于内存管理的原因。为什么在对象“击中”阶段之前为一些不会被处理的东西分配一些咬合。