我在进入菜单状态后尝试切换回PlayState
时出现问题。当我在菜单状态上单击“返回”时,出现错误,指出“[Fault] exception,information = TypeError:Error#1009:无法访问空对象引用的属性或方法”当游戏在离开我的菜单状态后尝试在PlayState中添加按钮时。以下是用于测试的PlayState代码片段:
public class PlayState extends FlxState
{
override public function create():void
{
// ...
add(new FlxButton(0, 0, "test"));
}
}
这是我的菜单状态:
import org.flixel.*;
public class stand_menu extends FlxState
{
public var ps:PlayState;
public function stand_menu(PS:PlayState)
{
ps = PS;
}
override public function create():void
{
FlxG.bgColor = 0xFFFFFFFF;
var bttn:FlxButton = new FlxButton(10, 10, "add cash",add_cash);
this.add(bttn);
var bttn2:FlxButton = new FlxButton(10, 30, "go back",go_back);
this.add(bttn2);
}
public function add_cash():void
{
ps.cash += 10;
}
public function go_back():void
{
FlxG.switchState(ps);
}
}
答案 0 :(得分:0)
我不确定那些状态是否会被这样使用。
如果您按照FlxG.switchState(state)
中的代码打开,则会以FlxGame.switchState
结束,发生这种情况
protected function switchState():void
{
//.... skipping some code here
//The old state is officially destroyed
if(_state != null)
_state.destroy();
//And actual state switching is done here. Note that _requestedState was set from FlxG.switch state
_state = _requestedState;
_state.create();
}
实际上,当你改变状态时,旧状态会被破坏。因此,FlxG.switchState()并不意味着用于加载旧状态,它只适用于新状态。每次切换时都会创建一个新状态。例如:
public static function quitToMainMenu():void {
FlxG.switchState(new MainMenuState);
}
如果您需要将某些东西存放在一个州中,并在以后使用它们,请不要这样做。将它们放在另一个静态或单例类中,这样一旦改变状态就不会删除它们。