0

PlayState当我在进入菜单状态后尝试切换回我时遇到问题。当我在菜单状态上单击“返回”时,当游戏尝试添加时,我收到一条错误消息,指出“[Fault] 异常,信息 = TypeError:错误 #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);
    }
}
4

1 回答 1

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

如果您需要将事物存储在一个状态中,并在以后使用它们,请不要这样做。将它们放在另一个静态或单例类中,这样一旦您更改状态,它们就不会被删除。

于 2014-02-05T20:37:53.997 回答