我正在使用 LibGDX 创建游戏。现在我有两个问题。
首先,我试图找回关键,以便游戏暂停。我已经在课堂上调用了该Gdx.input.setCatchBackKey(true)
方法。Game
这是代码:
public class CvSGame extends Game {
public Preferences prefs;
@Override
public void create() {
Gdx.input.setCatchBackKey(true);
prefs = Gdx.app.getPreferences("game_pref");
//setScreen(new SplashScreen(this));
//setScreen(new HomeScreen(this));
//setScreen(new GameScreen(this));
GamePlay.initialized(this);
}
}
GamePlay.initialized
是一种设置 的方法,Game
它GameScreen
实现了Screen
和InputProcessor
。
在中GameScreen
,我已经打电话了setInputProcessor
。的代码GameScreen
是:
public class GameScreen implements Screen, InputProcessor{
CvSGame parent;
public GameScreen(CvSGame pParent){
parent = pParent;
Gdx.input.setInputProcessor(this);
}
@Override
public void show() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void render(float delta) {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
@Override
public boolean keyDown(int keycode) {
if(keycode == Keys.BACK) {
pauseGame();
}
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
private void pauseGame(){
GamePlay.gameState = GamePlay.PAUSED;
}
}
我认为,如果我的 Android 设备上的后退按钮被按下,它会调用该keyDown
方法并且该方法pauseGame
将被调用。
但是,这并没有发生。我的游戏正在退出并且keyDown
没有调用该方法(如果调用了 keyDown 方法,我已经尝试记录一条消息,但该消息从未出现)。
我遇到的第二个问题是使用该方法暂停游戏引起的pause()
。我认为如果主页按钮或设备收到呼叫,则会调用其中的pause
方法GameScreen
。所以,我想如果我想在按下主页按钮时暂停我的游戏,我会调用 methodpauseGame
中的方法pause
。而且效果很好。但是问题出现在我按下后退按钮后,游戏就会退出。游戏退出后我尝试重新启动它,我的纹理没有加载。
顺便说一句,目前我没有使用AssetManager
而是调用一个方法来在构造函数中加载资产。