答案应该很简单,但我无法在任何地方找到答案......
所以我有一个Main.hx类和一个ObjectManager.hx类。 在主类的构造函数中,它调用ObjectManager.addAllToScreen();然后我的objectManager应该将对象添加到屏幕上。
我认为这样可以,因为在Main的构造函数中你可以说addChild(Objects.platform);但显然addChild是不可访问的?
错误是:Class<Main> has no field addChild
所以我猜猜addChild是Sprite的方法还是什么?
package;
class Main extends Sprite {
public function new() {
super();
ObjectManager.addAllToScreen();
}
}
在ObjectManager中:
package;
class ObjectManager {
public static function addAllToScreen():Void {
Main.addChild(Objects.platform);
Main.addChild(Objects.messageField);
}
}
更新:
好的,现在代码就是这样......除了从未出现在屏幕上的对象外,它运行得很好 - 但是如果addChild代码放在main中,它们会显示出来。
主:
class Main extends Sprite {
public function new() {
super();
var objectManager = new ObjectManager();
objectManager.addAllToScreen();
}
的ObjectManager:
package;
import openfl.display.Sprite;
class ObjectManager extends Sprite {
public function new() {
super();
}
public function addAllToScreen() {
addChild(Objects.platform);
addChild(Objects.messageField);
}
}
答案 0 :(得分:2)
openfl.DisplayObjectContainer
中提供了{ch>()Sprite
扩展名。所以你需要让你的类扩展Sprite,是的。
答案 1 :(得分:2)
您只需要将对舞台的引用传递给ObjectManager类,以便稍后可以向其添加内容。
检查一下。
Main.hx
package;
import openfl.display.Sprite;
class Main extends Sprite {
public function new () {
super();
ObjectManager.setup(stage);
ObjectManager.addAllToScreen();
}
}
ObjectManager.hx
package ;
import openfl.display.Sprite;
import openfl.display.Stage;
class ObjectManager {
// The reference to the applications stage
private static var stage:Stage;
// Do this first,
// we need to hold a reference to the Stage object so we can add to it later
public static function setup(stageref:Stage) {
stage = stageref;
}
public static function addAllToScreen() {
// An array of randomly generated sprite objects
var sprites:Array<Sprite> = [randomSprite(), randomSprite(), randomSprite()];
for(sprite in sprites) {
// Position the sprites randomly over the screen
sprite.x = Math.random() * stage.stageWidth;
sprite.y = Math.random() * stage.stageHeight;
// Add them to the stage
stage.addChild(sprite);
}
}
// Ignore this
// Makes a randomly sized circle in a random colour
private static function randomSprite():Sprite {
var spr = new Sprite();
spr.graphics.beginFill(Std.int(0xffffff * Math.random()), 1);
spr.graphics.drawCircle(0, 0, (Math.random() * 100) + 20);
spr.graphics.endFill();
return spr;
}
}