0

PlayStateメニュー状態に入った後、元の状態に戻そうとすると問題が発生します。メニュー状態で「戻る」をクリックすると、ゲームが追加しようとすると「[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference」というエラーが表示されますメニュー状態を離れた後の 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 に答える