2013-03-14 13 views
6

Se c'è un modo come gestire il pulsante Indietro in Libgdx?Come gestire il pulsante Indietro con più schermi in Libgdx?

per esempio nel AndEngine ho implementato questo genere:

@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; 
... 
... 
    } 
    } 
} 

Non ho idea di come farlo qui, perché ApplicationListener è solo creare, spettacolo, render ... Ho provato questo :

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

ma chiude comunque la mia domanda.

Per il momento: ho class Controller extends Game e utilizzo public void setScreen (Screen screen) per passare da una schermata all'altra.

risposta

9

Per farlo correttamente è necessario indicare LibGDX per prendere la chiave:

Gdx.input.setCatchBackKey(true); 

Si dovrebbe fare questo da qualche parte nelle prime fasi dell'applicazione. E impostalo su false quando vuoi che l'utente sia in grado di utilizzare il tasto Indietro.

+2

Un'alternativa per l'impostazione su false è quello di chiamare solo Gdx.app .exit() quando in realtà vuoi consentire all'utente di uscire. –

+0

Grazie, è stato utile. Ma ho ancora una domanda: 'if (Gdx.input.isKeyPressed (Keys.BACK)) { \t System.out.println (" È stato premuto il tasto Indietro "); \t nuovo Timer(). Schedule (new ScreenChangeTask (MyScreen.SOME_SCREEN), 1); \t \t} '- Ho messo questo codice nel metodo di rendering. E quando premo il pulsante Indietro, si ritorna a un altro schermo, e in quello schermo torna indietro a un altro, perché questa pace di codice viene attivata più volte fino a rimuovere il dito. Come posso risolvere questo problema? – Aleksandrs

+0

Tutto quello che devi fare è usare una variabile booleana nella tua istruzione if, e quindi impostare il valore booleano su false se il tasto viene premuto in modo che il ciclo di gioco successivo non lo inserisca. – Jyro117

1

set

Gdx.input.setCatchBackKey(true); 

quindi implementare sottostante Codice sulla keyUp ...

@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; 
     } 
    } 
    } 

Spero che questo vi aiuterà a

Problemi correlati