1

所以我最近了解到,通过将一个类导入我的主类,我可以从任何其他类访问它的功能。但是....我在导入类中的一个函数需要将显示对象添加到舞台。我很好地访问了静态函数,但它无法将对象添加到舞台。它甚至似乎无法识别 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 是我图书馆中的一个项目。

提前致谢。

4

2 回答 2

3

扩展您的主文档类并在那里添加静态变量,而不是在 init 上添加阶段:

public class Main extends MovieClip {

   public static var stage:Stage;

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

然后在应用程序的任何地方您都可以访问舞台:

Main.stage.addChild(element)
于 2012-01-31T16:38:41.497 回答
3

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

顺便说一句,这里有一个简单的解决方案来解决您的问题:为什么不将DisplayObjectContainer您想要添加的BreakPop作为静态方法的参数传递?

例子:

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
于 2012-01-31T17:51:57.263 回答