OpenFL - 如何在另一个 class 中使用 addChild?
OpenFL - How to use addChild in another class?
答案应该很简单,但我找不到答案..
所以我有一个 Main.hx class 和一个 ObjectManager.hx class。
在主 class 的构造函数中,它调用 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();
}
}
在对象管理器中:
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();
}
对象管理器:
package;
import openfl.display.Sprite;
class ObjectManager extends Sprite {
public function new() {
super();
}
public function addAllToScreen() {
addChild(Objects.platform);
addChild(Objects.messageField);
}
}
addChild() 在 openfl.DisplayObjectContainer
中可用,Sprite
对其进行了扩展。所以你需要让你的 class 扩展 Sprite,是的。
您只需将对舞台的引用传递给您的 ObjectManager class,以便您稍后可以向其中添加内容。
看看这个。
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;
}
}
答案应该很简单,但我找不到答案..
所以我有一个 Main.hx class 和一个 ObjectManager.hx class。 在主 class 的构造函数中,它调用 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();
}
}
在对象管理器中:
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();
}
对象管理器:
package;
import openfl.display.Sprite;
class ObjectManager extends Sprite {
public function new() {
super();
}
public function addAllToScreen() {
addChild(Objects.platform);
addChild(Objects.messageField);
}
}
addChild() 在 openfl.DisplayObjectContainer
中可用,Sprite
对其进行了扩展。所以你需要让你的 class 扩展 Sprite,是的。
您只需将对舞台的引用传递给您的 ObjectManager class,以便您稍后可以向其中添加内容。
看看这个。
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;
}
}