gpt4 book ai didi

java - Libgdx:手机的后退按钮在屏幕之间继续

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:48 25 4
gpt4 key购买 nike

我有三个实现 LibGdx Screen 类的类:

MainMenuScreen, LevelSelectScreen, GameScreen

现在我将 MainMenuScreen 的 setCatchBackKey 设置为 false,所以游戏只会在按下后退时退出。

LevelSelectScreen 和 GameScreen 已将 setCatchBackKey 设置为 true。

在 GameScreen 的渲染函数中我有:

@Override
public void render(float delta)
{
gameTime = delta;

if (Gdx.input.isKeyPressed(Keys.BACK))
new LevelSelectScreen(game);

...
}

将屏幕设置为显示关卡选择,在 LevelSelectScreens 的渲染函数中我有:

@Override
public void render(float delta)
{
if (Gdx.input.isKeyPressed(Keys.BACK))
new MainMenuScreen(game);

Update();
Draw();
} //end render

我遇到的问题是,当我在 GameScreen 上按回键时,LevelSelectScreen 会在屏幕上闪烁一会儿,然后直接返回到 MainMenuScreen。

我想我可以设置一些变量来检查在屏幕初始化时是否已经按下了返回键,但是我很好奇 LibGdx 中是否已经包含了一些“神奇”的函数,或者只是代码结构也可以解决这个问题问题。

最佳答案

首先像下面这样扩展 Stage 类:

public static class MyStage extends Stage{
public MyStage(float width, float height, boolean keepAspectRatio, SpriteBatch batch){
super(width, height, keepAspectRatio, batch);
}
@Override
public boolean keyDown(int keyCode) {
if(keyCode==Keys.BACK||keyCode==Keys.MENU){
if(getHardKeyListener()!=null)
getHardKeyListener().onHardKey(keyCode, 1);
}
return super.keyDown(keyCode);
}
@Override
public boolean keyUp(int keyCode) {
if(keyCode==Keys.BACK||keyCode==Keys.MENU){
if(getHardKeyListener()!=null)
getHardKeyListener().onHardKey(keyCode, 0);
}
return super.keyUp(keyCode);
}

/*********************Hard key listener***********************/
public interface OnHardKeyListener{
/**
* Happens when user press hard key
* @param keyCode Back or Menu key (keyCode one of the constants in Input.Keys)
* @param state 1 - key down, 0 - key up
*/
public abstract void onHardKey(int keyCode, int state);
}
private OnHardKeyListener _HardKeyListener = null;
public void setHardKeyListener(OnHardKeyListener HardKeyListener) {
_HardKeyListener = HardKeyListener;
}
public OnHardKeyListener getHardKeyListener() {
return _HardKeyListener;
}
}

然后在您的 Screen 类中:

protected final MyStage stage;
public YourScreen(Game game)
{
this.game = game;
stage = new MyStage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true, game.spriteBatch);

Gdx.input.setInputProcessor(stage);
//prevents the app from being pause...
Gdx.input.setCatchBackKey(true);
Gdx.input.setCatchMenuKey(true);

//Sets hard key listener...
stage.setHardKeyListener(new OnHardKeyListener() {
@Override
public void onHardKey(int keyCode, int state) {
if(keyCode==Keys.BACK && state==1){
//do something
}
}
});
}

希望它能帮助您或正在寻找这些东西的其他人。

关于java - Libgdx:手机的后退按钮在屏幕之间继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com