2016-06-19 10 views
1

Ich baue eine GUI für mein Spiel mit LibGDX.scene2d.ui und ich habe ein Problem, wenn ich versuche, Eingaben zu behandeln. Ich habe den folgenden Code, um etwas passieren, wenn die Taste gedrückt wird, aber es funktioniert nicht:Falsche Bedingungsprüfung mit Eingabe in LibGDX.scene2d

enterButton.addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent e, float x, float y, int p, int b) { 
      Gdx.app.log("touched", "down"); 
      return true; 
     } 
     @Override 
     public void touchUp(InputEvent e, float x, float y, int p, int b) { 
      Gdx.app.log("touched", "up"); 
      if(x > enterButton.getX() && x < enterButton.getRight() && y > enterButton.getY() && y < enterButton.getTop()) { 
       Gdx.app.log("cond", "cursor on actor"); 
       if(validate(loginField.getText(), passField.getText())) { 
        Gdx.app.log("cond", "validated"); 
        openMenu(); 
       } 
      } 
      Gdx.app.log("untouched", "up"); 
     } 
    }); 

Aber praktisch gleichen Code richtig funktioniert:

registerButton.addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent e, float x, float y, int p, int b) { 
      return true; 
     } 
     @Override 
     public void touchUp(InputEvent e, float x, float y, int p, int b) { 
      if(x > registerButton.getX() && x < registerButton.getRight() && y > registerButton.getY() && y < registerButton.getTop()) { 
       registerWindow.setVisible(true); 
       baseWindow.setVisible(false); 
      } 
     } 
    }); 

Nach Klick auf die ENTER-ich bin Ausgabe mit LibGDX-Protokollierung:

touched: down 
touched: up 
untouched: up 

Was kann falsch sein?

+2

Was ist das Problem hier, was willst du bekommen? können Sie erklären ? –

+0

Verwenden Sie ChangeListener und überschreiben Sie die geänderte Methode, um auf das Drücken von Tasten zu reagieren. – Tenfour04

Antwort

2

Sie können versuchen, eine clicklistener mit überprüfen, ob die Berührung innerhalb von Grenzen ist oder nicht, etwa so:

enterButton.addListener(new ClickListener() { 
    @Override 
    public void touchDown(InputEvent event, float x, float y, int pointer, int button) { 
     return true; 
    } 

    @Override 
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
     if (isOver()) { 
      if(validate(loginField.getText(), passField.getText())) { 
       openMenu(); 
      } 
     } 
    } 
}); 

Sie auch die Debug-Flags auf dem Schauspieler versuchen können, so dass Sie, wo das Klicken sehen Grenzen sind eigentlich mit enterButton.debug();