2011-08-28 19 views
38

Per il mio gioco, mi piacerebbe che il pulsante Indietro di Android ti portasse al menu di pausa, invece di ridurre al minimo il gioco. Da quello che ho cercato su google, so che ho bisogno di chiamareIn libgdx, come ottengo l'input dal pulsante Indietro?

Gdx.input.setCatchBackKey(true); 

Ma come faccio a verificare la pressione del pulsante? input.isKeyDown (Keys.BACK) non sembra fare nulla.

risposta

68

ho risolto il problema in questo modo:

public class MyApplication implements ApplicationListener, InputProcessor { 
    // !! Remember to override all other required methods !! 
    ... 

    @Override 
    public void create() { 
     Gdx.input.setInputProcessor(this); 
     Gdx.input.setCatchBackKey(true); 
     // rest of your stuff... 
    } 

    ... 

    @Override 
    public boolean keyDown(int keycode) { 
     if(keycode == Keys.BACK){ 
      // Do your optional back button handling (show pause menu?) 
     } 
     return false; 
    } 

    ... 
} 

Non roba copypasta ma spero che questo ti aiuta. :)

+0

Provalo! Grazie mille! –

+1

Preferisco farlo nella mia classe Screen, che mi darebbe un controllo più preciso – basilisk

+1

Nel caso in cui si voglia gestirlo in Screens, http://gamedev.stackexchange.com/questions/114972/handling-back-button-in -android-without-implementation-inputprocessore/114985 # 114985 – kingAm

27

È possibile utilizzare il metodo Gdx.input.isKeyPressed.

if (Gdx.input.isKeyPressed(Keys.BACK)){ 
    // Do something 
} 
+2

E questo va nel metodo render(), ovviamente. –

+0

Questo è salvatore della vita. È strano il motivo per cui InputProcessor sta ricevendo l'evento per il "pulsante" indietro quando quella classe viene utilizzata per il rilevamento della tastiera - per i dispositivi desktop. Sarebbe più logico ottenere questo evento nella classe GestureListener. Senza contare che è possibile impostare solo un InputProcessor. – MilanG

+2

@MilanG è possibile impostare più processori di input utilizzando un multiplexer, vedere l'esempio qui http://stackoverflow.com/a/20048019/22194 – codeulike

0

È possibile utilizzare Gdx.input.isKeyPressed (Keys.BACK) ma se si vuole che l'attività non si chiude è possibile gestire questo come:

Gdx.input.setCatchBackKey(true); 
18

prima creare un InputProcessor da gestire le azioni chiave back e quindi aggiungerle a un multiplexer in modo che altri componenti ricevano ancora eventi simili.

 InputProcessor backProcessor = new InputAdapter() { 
      @Override 
      public boolean keyDown(int keycode) { 

       if ((keycode == Keys.ESCAPE) || (keycode == Keys.BACK)) 

       // Maybe perform other operations before exiting 
       Gdx.app.exit(); 
       return false; 
      } 
     }; 


     InputMultiplexer multiplexer = new InputMultiplexer(mStage, 
       backProcessor); 
     Gdx.input.setInputProcessor(multiplexer); 


e consentire la cattura la chiave.

Gdx.input.setCatchBackKey(true); 


Questo è tutto quello che c'è. In bocca al lupo!

+0

Non funziona se la tastiera è attiva. –

Problemi correlati