所以我最近了解到,通过将一个类导入我的主类,我可以从任何其他类访问它的函数。但是......导入类中的一个函数需要向舞台添加显示对象。我很好地访问了静态函数,但它无法向舞台添加对象。它似乎甚至没有识别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是我库中的一个项目。
提前致谢。
答案 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 {
除此之外,这里有一个简单的问题解决方案:为什么不通过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