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

HaxeFlixel: How to call a getter/setter variable in another class

我正在构建一个基本游戏以了解 HaxeFlixel 的来龙去脉,并希望从 PlayState 中的 MenuState 调用具有 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 变量 returns 做那件事,没有它我会得到一个错误 Class<MenuState> has no field get_myVar。我确定这可能不是编写代码的方式,但此时我只是想让它工作。本质上,我要做的是让 MenuState 写入一个 PlayState 读取但不能写入的变量。我该怎么做?

myVarMenuState 中的 getter 函数在您的代码中不是 static,因此您不能像 MenuState.get_myVar() 那样访问它们。我认为将 myVar 设置为静态可以解决您的问题。

您不需要直接调用 get_myVar()。每当您在 MenuState 之外访问 myVar 时,都会调用 getter。您可以通过将 trace("message"); 添加到 get_myVar.

来测试它

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

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

package;

//imports etc.

class Reg {

    public static var myVar:Bool;
}

那么您只需要 import Reg 到您想要的任何 class 就可以在那里访问它。反正我喜欢那样做!