我正在使用Flash CS5。我在主类中声明了我的舞台上的一些实例,我想向它们附加一些事件,但是在主类构造函数时,这些实例被声明为null。
访问舞台实例的最佳做法是什么?是否有一个我可以添加的事件监听器,它会告诉我何时填充了舞台实例属性?
简单示例:
public class bleepBloop extends MovieClip {
public var productName:TLFTextField;
public function bleepBloop() {
trace( productName ); // Here it is null
}
}
但是,当我稍后访问productName时,它已被定义。
答案 0 :(得分: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
}
}