如何使用后退键在 LibGDX 中暂停和恢复?

2024-04-05

我正在使用 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而是在构造函数中调用一个方法来加载资源。


据我了解,您需要设置您的InputProcessor打电话之前setCatchBackKey。您可以通过更改来解决此问题GameScreen构造函数:

public GameScreen(CvSGame pParent) {
    parent = pParent;
    Gdx.input.setInputProcessor(this);
    Gdx.input.setCatchBackKey(true);
}

相关问题:在 libgdx 中,如何从后退按钮获取输入? https://stackoverflow.com/questions/7223723/in-libgdx-how-do-i-get-input-from-the-back-button

至于纹理未加载。确保当你的游戏被破坏时(dispose函数),您正在卸载所有纹理并处理它们。重新创建游戏后,请务必再次加载它们。

列出的所有类别here http://code.google.com/p/libgdx/wiki/MemoryManagment需要手动处理,否则可能导致泄漏。关于纹理,如果不先处理旧副本,则在加载纹理时可能会遇到问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用后退键在 LibGDX 中暂停和恢复? 的相关文章

随机推荐