Переключение FlxStates
У меня возникла проблема, когда я пытаюсь вернуться к своему PlayState
после входа в мое состояние меню. Когда я нажимаю "вернуться" в своем состоянии меню, я получаю сообщение об ошибке, в котором говорится, что "Исключение [Fault], information=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);
}
}
1 ответ
Я не уверен, что государства должны использоваться таким образом.
если вы откроете, следуйте коду от 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);
}
Если вам нужно хранить вещи в состоянии и использовать их позже, не делайте этого. Поместите их в другой статический или одноэлементный класс, чтобы они не удалялись после изменения вашего состояния.