可以向舞台添加对象的AS3 Global类

时间:2012-01-31 16:08:47

标签: actionscript-3 class global addchild

所以我最近了解到,通过将一个类导入我的主类,我可以从任何其他类访问它的函数。但是......导入类中的一个函数需要向舞台添加显示对象。我很好地访问了静态函数,但它无法向舞台添加对象。它似乎甚至没有识别addChild。这是因为它不在显示列表中吗?

我在这里缺少什么?你们怎么解决这个问题呢?我是如此接近,但到目前为止!

代码是这样的:

package {

import flash.display.Sprite;
import PopHandler;

public class MyMainClass extends Sprite {
    public function MyMainClass():void {
        PopHandler.LaunchPop();
    }
}

}

这是导入的类,不会向舞台添加任何内容。

package {
import flash.display.Sprite;

public class PopHandler extends Sprite {

    public function PopHandler():void {

    }

    public static function LaunchPop() {
        var bp:BreakPop = new BreakPop();
        bp.x = 500;
        bp.y = 347;
        addChild(bp);
    }
}   

}

BreakPop是我库中的一个项目。

提前致谢。

2 个答案:

答案 0 :(得分:3)

扩展你的主文档类并添加静态var,而不是在init上配合阶段:

public class Main extends MovieClip {

   public static var stage:Stage;

   public function Main ():void {
     Main.stage = stage;
   }
}

然后在应用中的任何位置您可以访问舞台:

Main.stage.addChild(element)

答案 1 :(得分:3)

由于您使用的是静态方法,因此PopHandler不是精灵的实例,因此无法访问stage属性。如果您想将其保留为静态方法,那么您基本上可以跳过extends Sprite并转到public class PopHandler {

除此之外,这里有一个简单的问题解决方案:为什么不通过DisplayObjectContainerBreakPop添加为静态方法的参数?

示例:

public static function LaunchPop(target:DisplayObjectContainer) {
    var bp:BreakPop = new BreakPop();
    bp.x = 500;
    bp.y = 347;
    target.addChild(bp);
}

然后你这样称呼它(一些例子):

PopHandler.LaunchPop(this); // <-- adding to current object
PopHandler.LaunchPop(root as DisplayObjectContainer); // <-- adding to root
PopHandler.LaunchPop(stage); // <-- adding to stage