无法通过actionscript创建对象

时间:2011-09-30 12:30:37

标签: flash actionscript-3

我使用相同的名称创建了MovieClip,“为ActionScript导出它”。当我通过将对象拖动到舞台时可视化创建对象,但使用var smth:* = new myClass()时发生错误,这是可以的。有一个错误,因为我在导出的MovieClip中有一些代码,它涉及舞台。它发生,以便在运行代码时不会实例化阶段?我的意思是,我正在第二帧上创建对象,所以它似乎有点不可能。当(在MovieClip中)我写trace(stage);输出为null时。正如我所说,在视觉上创建对象没有问题。女士们,先生们,是什么......?!

2 个答案:

答案 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)参数。