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
读取但不能写入的变量。我该怎么做?
myVar
和 MenuState
中的 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 就可以在那里访问它。反正我喜欢那样做!
我正在构建一个基本游戏以了解 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
读取但不能写入的变量。我该怎么做?
myVar
和 MenuState
中的 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 就可以在那里访问它。反正我喜欢那样做!