我使用相同的名称创建了MovieClip,“为ActionScript导出它”。当我通过将对象拖动到舞台时可视化创建对象,但使用var smth:* = new myClass()
时发生错误,这是可以的。有一个错误,因为我在导出的MovieClip中有一些代码,它涉及舞台。它发生,以便在运行代码时不会实例化阶段?我的意思是,我正在第二帧上创建对象,所以它似乎有点不可能。当(在MovieClip中)我写trace(stage);
输出为null
时。正如我所说,在视觉上创建对象没有问题。女士们,先生们,是什么......?!
答案 0 :(得分:1)
import flash.events.Event;
在类的构造函数中,为要添加的阶段添加一个eventListener。
this.addEventListener(Event.ADDED_TO_STAGE, myFunction);
然后只需创建一个名为init且事件为参数的eventListener。
function myFunction(e : Event) : void
{
this.removeEventListener(Event.ADDED_TO_STAGE, myFunction);
// execute code here
}
removeEventListener是必需的,不要忘记删除它!闪存中的错误会触发事件添加到阶段两次,因此如果您不想执行两次代码,则必须将其删除。
答案 1 :(得分:1)
如果我按照您的说法进行操作,那么您的stage
子类内部的MovieClip
就没有引用?如果MovieClip
未附加到舞台或已附加到其上的其他DisplayObjectContainer
(显示列表链中的某个位置),则会发生这种情况。
验证阶段是否可用以及在可用时执行代码的一种方法是FlashDevelop项目中常见的一些代码片段:
public function Main():void {
stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
因此,如果找到stage
IS,它立即触发init()
方法(不带参数),否则它将等待它被添加到阶段(或者已经附加的其他一些DisplayObjectContainer) ),当它使用Event
作为回调方法时会传递init(e:Event)
参数。