HaxeFlixel:如何在另一个类中调用getter/setter变量

问题描述:

我正在构建一个基本的游戏来学习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读取但不能写入的变量。我会怎么做呢?

myVar以及MenuState中的吸气功能在您的代码中不是static,因此您不能像MenuState.get_myVar()那样访问它们。我认为制作myVar静态将是您的问题的一个好方案。你可以直接拨打get_myVar()。只要您在MenuState之外访问myVar,就会调用吸气器。您可以通过将trace("message");添加到get_myVar来测试。

您需要使用构造函数创建它的实例,即public function new()。出于这个原因,通常最好使用构造函数为var创建一个独立的class.hx,然后在playstate中创建它的一个实例。

否则,我会创建一个注册表类来存储需要被共享的增值经销商,例如,创建一个名为像Reg.hx在主包新的类,然后:

package; 

//imports etc. 

class Reg { 

    public static var myVar:Bool; 
} 

,那么你只需要到import Reg到你想要的任何课程,你可以在那里访问它。我喜欢这样做!