2016-03-09 27 views
2

答案應該很簡單,但我無法找到任何地方..OpenFL - 如何在另一個類中使用addChild?

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

UPDATE:

確定,所以現在的代碼是這樣的......它從永遠顯示在屏幕上了對象運行良好分開 - 但是如果addChild代碼放在主體中,它們顯示出來。

主要:

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

的addChild()是提供openfl.DisplayObjectContainer,其中Sprite延伸。所以你需要讓你的類擴展Sprite,是的。

+0

嗨,我已經更新了代碼,我認爲你說應該改爲,但它現在給我一個新的錯誤... – k13ran

+0

您正在使用靜態功能。 addChild()必須從實例中調用。 – larsiusprime

+0

好吧,我認爲我們已經到了那裏 - 它不再是一個靜態調用,並且不會拋出錯誤,但仍然沒有對象顯示。 – k13ran

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; 
    } 
} 
相關問題