我正在构建一个基本游戏,以了解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
读但不能写的变量。我怎么会这样做?
答案 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
到你想要的任何课程,你可以在那里访问它。我喜欢这样做!