OpenFL - 如何在另一个类中使用addChild?

时间:2016-03-09 00:12:02

标签: haxe addchild openfl

答案应该很简单,但我无法在任何地方找到答案......

所以我有一个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);
    }
}

2 个答案:

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