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

时间:2016-12-03 21:53:13

标签: haxe haxeflixel

我正在构建一个基本游戏,以了解HaxeFlixel的来龙去脉,并希望在MenuState中使用PlayState中的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
        }
    }
}

使用ms变量返回做那件事,没有它我得到错误Class<MenuState> has no field get_myVar。我确信这可能不是如何编写代码,但此时我只是想让它工作。基本上我要做的是让MenuState写一个PlayState读但不能写的变量。我怎么会这样做?

2 个答案:

答案 0 :(得分:1)

myVar并且MenuState中的getter函数在您的代码中不是static,因此您无法像MenuState.get_myVar()那样访问它们。我认为使myVar静态可以解决您的问题。

您无需直接致电get_myVar()。只要您在myVar之外访问MenuState,就会调用getter。您可以通过向trace("message");添加get_myVar来测试。

答案 1 :(得分:0)

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

否则,我会创建一个注册表类来存储需要共享的变量,例如,在主包中创建一个名为Reg.hx的新类,然后:

package;

//imports etc.

class Reg {

    public static var myVar:Bool;
}

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