2014-01-25 3 views
0

У меня возникли проблемы с перезагрузкой 2D-игры, когда пользователь нажимает кнопку «Новая игра».Перезапуск 2D-игры

Структура моей игры:

В игре есть несколько «экранов»: открытие экрана, экран инструкции, главный экран игры и игры-над экраном.

Каждого экран является экземпляром класса: OpeningScreen класса, GameScreen класса и т.д.

Существует класс по имени Main. Этот класс имеет три роли.

  • Это JFrame (окно) программы.
  • Он имеет основной метод - первый класс для запуска.
  • У этого есть метод, который меняет экраны.

Когда программа запускается, этот класс запускается. При первом запуске:

  1. Создает новый экземпляр сам по себе (это класс типа JFrame).
  2. Создает экземпляр каждого «экранного класса». Конструктор каждого «экранного класса» принимает экземпляр Main в качестве аргумента: (aka: GameOverScreen gameOverScreen = new GameOver(this)).
  3. Создает новый JPanel с именем mainPanel и добавляет его в JFrame. Любой экран, который будет отображаться, будет содержаться в этом JPanel (экраны также являются классами типа JPanel).

Как метод changeScreen() работает:

Подпись changeScreen() заключается в следующем: changeScreen(JPanel from, JPanel to).

Всякий раз, когда экран необходимо изменить, текущий экран, который отображается, вызывает этот метод, например: main.changeScreen(this, main.InstructionsScreen). Он удаляет предыдущий экран с mainPanel и добавляет новый экран в mainPanel. Как сказано, эти экраны создаются при запуске программы.

Это метод, который изменяет экраны:

public void changeScreen(JPanel from, JPanel to){ 

    mainPanel.remove(from); 
    mainPanel.add(to); 

    mainPanel.revalidate(); 
    mainPanel.repaint(); 

} 

Моя проблема:

После игра закончена, класс игры вызывает changeScreen метод: main.changeScreen(this, main.GameOverScreen).

Это заменяет игровой экран игрой над экраном. Нажав кнопку «Новая игра» на экране игры, звоните main.changeScreen(this, main.GameScreen).

Проблема: Нажатие кнопки «Новая игра» на экране игры, действительно, еще раз отображает экземпляр класса Game. Но это старый экземпляр, поэтому игра не перезапускается. Это уже закончено.

Я пытался сделать следующие изменения в changeScreen():

public void changeScreen(JPanel from, JPanel to){ 

    mainPanel.remove(from); 

    if(to.equals(gameScreen)){ 
     gameScreen = null; 
     gameScreen = new GameScreen(this); 
    } 
    mainPanel.add(gameScreen); 

    mainPanel.revalidate(); 
    mainPanel.repaint(); 

} 

Это должно сбросить gameScreen объект. Но это создает задержку около 10 секунд при нажатии кнопки «Новая игра».

Что было бы хорошим способом перезапустить игру?

Спасибо

ответ

0

Вы должны удалить ребенка/экземпляр. Предполагаю, что это ActionScript 3, вы должны сделать removeChild, а затем сделать дочерний элемент null. Попробуйте это.

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