У меня возникли проблемы с перезагрузкой 2D-игры, когда пользователь нажимает кнопку «Новая игра».Перезапуск 2D-игры
Структура моей игры:
В игре есть несколько «экранов»: открытие экрана, экран инструкции, главный экран игры и игры-над экраном.
Каждого экран является экземпляром класса: OpeningScreen
класса, GameScreen
класса и т.д.
Существует класс по имени Main
. Этот класс имеет три роли.
- Это JFrame (окно) программы.
- Он имеет основной метод - первый класс для запуска.
- У этого есть метод, который меняет экраны.
Когда программа запускается, этот класс запускается. При первом запуске:
- Создает новый экземпляр сам по себе (это класс типа JFrame).
- Создает экземпляр каждого «экранного класса». Конструктор каждого «экранного класса» принимает экземпляр Main в качестве аргумента: (aka:
GameOverScreen gameOverScreen = new GameOver(this)
). - Создает новый 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 секунд при нажатии кнопки «Новая игра».
Что было бы хорошим способом перезапустить игру?
Спасибо