2016-12-03 88 views
1

我正在構建一個基本的遊戲來學習HaxeFlixel的來龍去脈,並且想從MenuStatePlayState中調用具有getter/setter屬性的變量。代碼看起來是這樣的:HaxeFlixel:如何在另一個類中調用getter/setter變量

class MenuState extends FlxState 
{ 
    @:isVar public var myVar(get, null):Bool; 

    public function get_myVar():Bool 
    { 
     return myVar; 
    } 
} 

class PlayState extends FlxState 
{ 
    private var _foo:Bool; 

    override public function create():Void 
    { 
     // var ms = new MenuState; doing it like this doesn't return anything 
     _foo = MenuState.get_myVar(); 
     if (_foo) 
     { 
      // do this thing 
     } 
     else 
     { 
      // do that thing 
     } 
    } 
} 

有了它返回做的事情毫秒變量,沒有它,我得到一個錯誤Class<MenuState> has no field get_myVar。我相信這可能不是如何編寫代碼,但在這一點上,我只是試圖讓它工作。基本上我想要做的是讓MenuState寫入PlayState讀取但不能寫入的變量。我會怎麼做呢?

回答

1

myVar以及MenuState中的吸氣功能在您的代碼中不是static,因此您不能像MenuState.get_myVar()那樣訪問它們。我認爲製作myVar靜態將是您的問題的一個好方案。你可以直接撥打get_myVar()。只要您在MenuState之外訪問myVar,就會調用吸氣器。您可以通過將trace("message");添加到get_myVar來測試。

0

您需要使用構造函數創建它的實例,即public function new()。出於這個原因,通常最好使用構造函數爲var創建一個獨立的class.hx,然後在playstate中創建它的一個實例。

否則,我會創建一個註冊表類來存儲需要被共享的增值經銷商,例如,創建一個名爲像Reg.hx在主包新的類,然後:

package; 

//imports etc. 

class Reg { 

    public static var myVar:Bool; 
} 

,那麼你只需要到import Reg到你想要的任何課程,你可以在那裏訪問它。我喜歡這樣做!

相關問題