我正在使用 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
with a GameScreen
它实现了Screen
and InputProcessor
.
In the GameScreen
,我已经打电话了setInputProcessor
。代码为GameScreen
is :
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
in GameScreen
将被调用。所以,我想如果我想在按下主页按钮时暂停游戏,我会调用该方法pauseGame
在方法中pause
。而且效果很好。但问题是在我按下后退按钮后游戏就会退出。游戏退出并尝试再次启动后,我的纹理未加载。
顺便说一句,目前我没有使用AssetManager
而是在构造函数中调用一个方法来加载资源。