切换FlxStates

时间:2014-01-26 21:42:41

标签: flixel

我在进入菜单状态后尝试切换回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);
    }
}

1 个答案:

答案 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);
    }

如果您需要将某些东西存放在一个州中,并在以后使用它们,请不要这样做。将它们放在另一个静态或单例类中,这样一旦改变状态就不会删除它们。