Извините, что я очень новичок в Java и LibGDX, однако у меня проблема.clickListener не инициализируется правильно
У меня есть две кнопки в моей игре в понг. Если счет 1 или счет 2 равен 5, игра заканчивается. Это делается путем смещения шара и весла, затем вызывается метод drawButtonRematch и drawButtonMenu, которые нарисовывают две кнопки «REMATCH» и «MAIN MENU».
Я не уверен, почему, но кнопка clickListener для кнопки реванша работает только тогда, когда вы играете в игру (не когда score1 или score2 = 5).
Проще говоря, в то время как вы играете в игру (не тогда, когда оценка = 5), кнопка реванша не существует, а clickListener. Если вы нажмете кнопку, где находится кнопка, она сделает матч-реванш. Поэтому, если пользователь должен был случайно щелкнуть эту область, они сбросят игру.
Вот визуализация изображения:
Вот мой код. Это кнопка, вызывающая проблемы.
private void drawButtonRematch(float dt){
final Texture texture = new Texture(Gdx.files.internal("Assets/buttonRematch.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
Stage stage = new Stage();
stage.clear();
Image buttonRematch = new Image(texture);
buttonRematch.setX(640-(buttonRematch.getWidth()/2));
buttonRematch.setY(120);
buttonRematch.setWidth(300);
buttonRematch.setHeight(100);
Gdx.input.setInputProcessor(stage);
buttonRematch.addListener(new ClickListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
{
currentState = GameState.RESET;
return true;
}
});
Вот кнопка главного меню, которая работает. Буквально то же самое, как drawButtonRematch
private void drawButtonMenu(float dt) {
final Texture texture = new Texture(Gdx.files.internal("Assets/buttonMenu.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
Stage stage = new Stage();
stage.clear();
// Menu
Image mainMenu = new Image(texture);
mainMenu.setX(640-(mainMenu.getWidth()/2));
mainMenu.setY(10);
mainMenu.setWidth(300);
mainMenu.setHeight(100);
Gdx.input.setInputProcessor(stage);
mainMenu.addListener(new ClickListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
{
currentState = GameState.MENU;
return true;
}
});
stage.addActor(mainMenu);
stage.draw();
}
Тогда, наконец, в моей игровой логики я
if(score1 == 5){
drawWin(dt);
paddle1.move(-1000, -1000);
paddle2.move(-1000, -1000);
ball.setVelocity(0, 0);
ball.move(640, 50);
drawButtonRematch(dt);
drawButtonMenu(dt);
}
else if (score2 == 5){
drawWin2(dt);
paddle1.move(-1000, -1000);
paddle2.move(-1000, -1000);
ball.setVelocity(0, 0);
ball.move(640, 50);
drawButtonRematch(dt);
drawButtonMenu(dt);
}
Я сожалею, если это худший код, который вы видели в своей жизни, я только начал с Java на 1 августа! Спасибо за любую помощь.