我正在尝试使用Android设备上的后退键来为我的游戏设置屏幕..但它似乎不起作用.. 我在网上看了几篇帖子,这样做了......
在菜单屏幕中,如果按下反键,应用程序应该退出..但是没有触发任何操作...即使按下后退键,也会触发很多操作...
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;
}
答案 0 :(得分:3)
首先,您可能希望将其从使用keyDown()更改为输入处理器中的keyUp()。 keyUp()只会在用户释放密钥时调用一次,但是后退密钥关闭的每一帧都会调用keyDown()(大约每秒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;
}
});
}
}
}
答案 1 :(得分:2)
你应该改为@Override keyUp按钮。
@Override
public boolean keyUp(int keycode) {
if ((state == SETTING_STATE || state == TOPSCORES_STATE) && keycode == Keys.BACK) {
state = RUNNING_STATE;
is_game_start = true;
} else {
Gdx.app.exit();
}
return false;
}