2013-03-14 7 views
6

Gibt es eine Möglichkeit, wie man die Zurück-Taste in Libgdx verwaltet?Wie man Zurück-Taste mit mehreren Bildschirmen in Libgdx verwalten?

zum Beispiel in AndEngine habe ich dies so umgesetzt:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {   
      switch (currentScene) { 
       case SPLASH: 
        break; 
       case MENU: 
        Process.killProcess(Process.myPid()); 
        break; 
       case WORLDMENU: 
         start(MENU); 
         break; 
... 
... 
    } 
    } 
} 

Ich habe keine Ahnung, wie es hier zu tun, weil ApplicationListener nur Show ist erstellen, machen ... ich diese tryed :

if (Gdx.input.isButtonPressed(Keys.BACK)){ 
    new ScreenChangeTask(MyScreen.SPLASH); 
} 

aber es schließt immer noch meine Anwendung.

FYI: Ich habe class Controller extends Game und ich verwende public void setScreen (Screen screen), um zwischen den Bildschirmen zu wechseln.

Antwort

9

Um dies tun zu können, sollte Libgdx sagen müssen, um die Zurück-Taste zu fangen:

Gdx.input.setCatchBackKey(true); 

Sie diese irgendwo in der Anwendung früh tun sollte. Setzen Sie es auf "false", wenn Sie möchten, dass der Benutzer den Zurück-Schlüssel verwenden kann.

+2

Eine Alternative es zu falsch Einstellung ist nur callen Gdx.app .exit(), wenn Sie dem Benutzer eigentlich erlauben möchten, den Vorgang zu beenden. –

+0

Danke, es war hilfreich. Aber ich habe noch eine Frage: 'if (Gdx.input.isKeyPressed (Keys.BACK)) { \t System.out.println (" Zurück-Taste wurde gedrückt "); \t neuer Timer(). Zeitplan (neu ScreenChangeTask (MyScreen.SOME_SCREEN), 1); \t \t} '- Ich habe diesen Code in render-Methode. Und wenn ich die Zurück-Taste drücke, schaltet es auf eine andere zurück, und auf diesem Bildschirm schaltet es zurück zu einer anderen, weil diese Ruhe des Codes mehrere Male ausgelöst wird, bis ich den Finger entferne. Wie kann ich dieses Problem beheben? – Aleksandrs

+0

Alles, was Sie tun müssen, ist eine boolesche Variable in Ihrer if-Anweisung zu verwenden, und dann den booleschen Wert auf false zu setzen, wenn die Taste gedrückt wird, damit die nächste Spielschleife sie nicht eingibt. – Jyro117

1

gesetzt

Gdx.input.setCatchBackKey(true); 

dann unter Code auf keyUp implementieren ...

@Override 
     public boolean keyUp(int keycode) { 
      if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {   
       switch (currentScene) { 
        case SPLASH: 
         break; 
        case MENU: 
         Process.killProcess(Process.myPid()); 
         break; 
        case WORLDMENU: 
          game.setScreen(new MenuScreen(game)); //MenuScreen is your class Screen 
          break; 
      return false; 
     } 
    } 
    } 

Hope this helfen Ihnen

Verwandte Themen