2014-08-31 2 views
0

Извините, что я очень новичок в Java и LibGDX, однако у меня проблема.clickListener не инициализируется правильно

У меня есть две кнопки в моей игре в понг. Если счет 1 или счет 2 равен 5, игра заканчивается. Это делается путем смещения шара и весла, затем вызывается метод drawButtonRematch и drawButtonMenu, которые нарисовывают две кнопки «REMATCH» и «MAIN MENU».

Я не уверен, почему, но кнопка clickListener для кнопки реванша работает только тогда, когда вы играете в игру (не когда score1 или score2 = 5).

Проще говоря, в то время как вы играете в игру (не тогда, когда оценка = 5), кнопка реванша не существует, а clickListener. Если вы нажмете кнопку, где находится кнопка, она сделает матч-реванш. Поэтому, если пользователь должен был случайно щелкнуть эту область, они сбросят игру.

Вот визуализация изображения:

http://imgur.com/a/n8F4l

Вот мой код. Это кнопка, вызывающая проблемы.

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 августа! Спасибо за любую помощь.

ответ

2

Вы должны просто установить касание кнопки повторного вызова в отключенный режим, когда он скрыт.

Вы можете сделать это следующим образом:

public void hideRematchButton(){ 
    rematchButton.setVisible(false); 
    rematchButton.setTouchable(Touchable.disabled); 
} 

public void showRematchButton(){ 
    rematchButton.setVisible(true); 
    rematchButton.setTouchable(Touchable.enabled); 
}