2014-01-26 2 views
0

У меня проблема, когда я пытаюсь вернуться к моему PlayState после входа в мое состояние меню. Когда я нажимаю «вернуться» в мое состояние меню, я получаю сообщение об ошибке «Исключение [Fault], информация = ТипError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект», когда игра пытается чтобы добавить кнопку в PlayState после выхода из состояния моего меню. Вот отрывок из кода PlayState для тестирования:Переключение FlxStates

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

Я не уверен, что государства предназначены для использования, как это.

если открыть следовать код из 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); 
    } 

Если вам нужно хранить вещи в состоянии и использовать их позже, не делайте этого. Поместите их в другой статический или одноэлементный класс, чтобы они не удалялись после изменения состояния.

+0

спасибо! да, пройдя часть документации, я узнал, что старое государство исчезнет навсегда. использование класса для хранения данных - это настоящая идея, спасибо. – ajax09

 Смежные вопросы

  • Нет связанных вопросов^_^