2013-03-14 29 views
6

Jeśli istnieje jakiś sposób zarządzania przyciskiem Wstecz w Libgdx?Jak zarządzać przyciskiem Wstecz przy użyciu wielu ekranów w Libgdx?

na przykład w AndEngine I wprowadziły to tak:

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

nie mam pojęcia jak to zrobić tutaj, ponieważ ApplicationListener ma tworzyć tylko, show, czynią ... tryed to :

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

ale nadal zamyka moją aplikację.

FYI: Mam class Controller extends Game i używam public void setScreen (Screen screen) do przełączania się między ekranami.

Odpowiedz

9

W tym celu właściwie trzeba powiedzieć libgdx złapać z powrotem klucz:

Gdx.input.setCatchBackKey(true); 

należy zrobić, to gdzieś na początku aplikacji. I ustaw na false, gdy chcesz, aby użytkownik mógł korzystać z klawisza wstecz.

+2

alternatywa do ustawiania go na false, to po prostu zadzwonić Gdx.app .exit(), kiedy rzeczywiście chcesz zezwolić użytkownikowi na zamknięcie. –

+0

Dzięki, było pomocne. Ale mam jeszcze jedno pytanie: 'if (Gdx.input.isKeyPressed (Keys.BACK)) { \t System.out.println (" Back key został wciśnięty "); \t nowy zegar(). (Nowy ekran ScreenChangeTask (MyScreen.SOME_SCREEN), 1); \t \t} '- Umieszczam ten kod w metodzie renderowania. A kiedy naciśniesz przycisk Wstecz, przełącza się on z powrotem do innego ekranu, a na tym ekranie przełącza się z powrotem na inny, ponieważ ten spokój kodu jest wyzwalany kilka razy, aż usunę palec. Jak mogę rozwiązać ten problem? – Aleksandrs

+0

Wszystko, co musisz zrobić, to użyć zmiennej boolean w instrukcji if, a następnie ustawić wartość boolean na false, jeśli klawisz zostanie naciśnięty, aby kolejna pętla gry go nie wprowadziła. – Jyro117

1

ustawić

Gdx.input.setCatchBackKey(true); 

następnie wdrożyć poniżej kod na 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; 
     } 
    } 
    } 

nadzieję, że pomoże Ci

Powiązane problemy