3

Androidデバイスの戻るキーを使用してゲームの画面を設定しようとしています..しかし、うまくいかないようです..オンラインでいくつかの投稿を読みましたnこれを行いました...

メニュー画面で、バックキーが押された場合、アプリは終了するはずです..しかし、アクションはトリガーされません...バックキーを何度も押しても、アクションはトリガーされません...

public class MenuScreen extends AbstractScreen implements InputProcessor  {

@Override
   public void show()
   {
      Gdx.input.setInputProcessor(this);
      Gdx.input.setCatchBackKey(true);
      Gdx.input.setCatchMenuKey(true);

}


   @Override
   public boolean keyDown(int keycode) {
      // TODO Auto-generated method stub
        if(keycode == Keys.BACK)
        { 
             Gdx.app.exit();
          }

      return false;
   }

LevelScreen では、戻るキーを押すと画面が menuscreen に設定されますが、アプリケーションが終了します。戻るキーを無効にする方法はありますか??押されても何も起こりませんか?

  public class LevelScreen extends AbstractScreen  implements InputProcessor {

@Override
   public void show()
   {
      Gdx.input.setInputProcessor(this);
      Gdx.input.setCatchBackKey(true);
      Gdx.input.setCatchMenuKey(true);

}

@Override
   public boolean keyDown(int keycode) {
      if(keycode == Keys.BACK)
      {
                game.setScreen(game.geMenuScreen());
           }
      // TODO Auto-generated method stub
      return false;
   }
4

2 に答える 2

3

まず、入力プロセッサで keyDown() を使用するのを keyUp() に変更することをお勧めします。keyUp() は、ユーザーがキーを放したときに 1 回だけ呼び出されますが、keyDown() は、戻るキーが押されたフレームごとに呼び出されます (1 秒間に約 60 回)。そのため、アプリが画面を切り替えて 2 フレームで終了する可能性がありますが、これは望ましくない可能性があります。

レベル画面からアプリが閉じてしまうのは、これが原因である可能性があります。LevelScreen -> ScoreScreen -> MenuScreen と進み、3 フレーム (約 50 ミリ秒) で終了します。ScoreScreen で開始するアプリケーションのサンプル コードを次に示します。ユーザーが押す (そして放す) と、戻るボタンはメニュー画面に移動します。次に、戻るボタンをもう一度押す (そして放す) と、アプリケーションが閉じます。

このコードをゲームに適合させる必要がありますが、これにより、何かを見て作業することができます。(注: Android 2.3.3 および LibGDX 0.9.8 で動作することを確認しました)

public class BackTest extends Game {
    public Screen menu;
    public Screen score;

    @Override public void create() {
        Gdx.input.setCatchBackKey(true);
        this.menu = new MenuScreen(this);
        this.score = new ScoreScreen(this);
        this.setScreen(this.score);
    }

    public static abstract class AbstractScreen implements Screen {
        @Override public void render(final float delta) {}
        @Override public void resize(final int width, final int height) {}
        @Override public void show() {}
        @Override public void hide() {}
        @Override public void pause() {}
        @Override public void resume() {}
        @Override public void dispose() {}
    }

    public static class MenuScreen extends AbstractScreen {
        public final BackTest game;

        public MenuScreen(final BackTest game) {
            this.game = game;
        }

        @Override public void show() {
            Gdx.app.log("Menu", "Show");
            Gdx.input.setInputProcessor(new InputAdapter() {
                @Override public boolean keyUp(final int keycode) {
                    if (keycode == Keys.BACK) {
                        Gdx.app.log("Menu", "Quit");
                        Gdx.app.exit();
                    }
                    return false;
                }
            });
        }
    }

    public static class ScoreScreen extends AbstractScreen {
        public final BackTest game;

        public ScoreScreen(final BackTest game) {
            this.game = game;
        }

        @Override public void show() {
            Gdx.app.log("Score", "Show");
            Gdx.input.setInputProcessor(new InputAdapter() {
                @Override public boolean keyUp(final int keycode) {
                    if (keycode == Keys.BACK) {
                        Gdx.app.log("Score", "Back");
                        ScoreScreen.this.game.setScreen(ScoreScreen.this.game.menu);
                    }
                    return false;
                }
            });
        }
    }
}
于 2013-03-30T17:43:17.283 に答える