Я делаю игру в Android Studio с использованием LibGDX и пытаюсь добавить кнопку паузы в верхний угол главного экрана игры.До сих пор моя игра была в паузе, но я делала паузу только при нажатии клавиши.Теперь я хочу добавить кнопку, и я получил кнопку для рендеринга в верхнем правом углу, но когда я нажимаю ее, она работает только один раз.Когда я нажимаю в первый раз, моя игра останавливается.Но каждый раз, когда я пытаюсь сделать паузу после этого, это не работает.Я использовал обширные операторы журнала и отладку и обнаружил, что после однократного нажатия на него слушатель даже не обнаруживает нажатие кнопки вообще, поэтому я уверен, что именно в этом моя проблема.
Вот как я создаю свою кнопку в своем классе HUD, который является классом, который постоянно печатает счет на экране:
TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal("Buttons.pack"));
Skin skin = new Skin();
skin.addRegions(buttonAtlas);
ImageButton.ImageButtonStyle style = new ImageButton.ImageButtonStyle();
style.imageUp = skin.getDrawable("PauseButton");
style.imageDown = skin.getDrawable("PauseButton");
style.imageChecked = skin.getDrawable("PauseButton");
button = new ImageButton(style);
Затем я добавил слушателя, чтобы проверить, нажата ли кнопка:
button.addListener(new ClickListener()
{
@Override
public void clicked(InputEvent event, float x, float y)
{
Gdx.app.log("","Button was pressed");
pauseGame();
}
});
Метод pauseGame (), вызываемый после того, как слушатель обнаруживает нажатие кнопки:
public void pauseGame()
{
Gdx.app.log("","Game should be pausing");
screen.pauseGame();
}
screen - это класс PlayScreen, который является основным игровым экраном для моей игры, иего метод pauseGame () работает отлично.Игра перед нажатием кнопки паузы выглядит следующим образом (Вы можете увидеть кнопку паузы в правом верхнем углу, извините за графику, они просто заполнители, пока я не создам и не добавлю свою графику): Игра до паузы
В моем основном классе PlayScreen это мой метод pauseGame:
public void pauseGame()
{
gamePaused = true;
if(music.isPlaying())
{
musicType = type.NORMAL;
music.pause();
}
else if(barrageMusic.isPlaying())
{
musicType = type.BARRAGE;
barrageMusic.pause();
}
createPauseWindow();
}
А затем в моем методе рендеринга я вызываю другой метод, называемый update.В этом методе я обновляю свой видовой экран, мой HUD и создаю новых врагов.Это единственный метод, который перестает вызываться, когда gamePaused имеет значение true.Остальная часть моего рендеринга и другие необходимые обновления все еще происходят.Я пытался решить эту проблему в течение долгого времени, но независимо от того, сколько разных способов я переписываю код, чтобы приостановить игру или сделать разных слушателей, кнопка паузы работает только один раз, а затем никогда больше.