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;
    }
}