在 libgdx 中,当用户单击暂停时如何显示暂停屏幕,它应该覆盖当前屏幕,并且当用户单击恢复时它应该关闭屏幕我如何在 libgdx 中实现它。
问问题
10953 次
3 回答
6
我不喜欢这里关于使用原生 Android View 的建议,这可以在 libgdx 本身内巧妙地完成。
我会有一些变量来定义游戏的当前状态。如果按下暂停按钮,或者游戏被 android 暂停(例如,如果用户按下主页按钮),则该变量应该获得一个暂停值。然后在您的 render() 方法中,如果此变量具有 pause 值,您将绘制一些暂停屏幕。
该屏幕可以以多种方式绘制。如果您使用舞台,您有两个不错的选择:
如果暂停,除了游戏阶段之外,在您绘制游戏阶段之后,绘制一个带有暂停项目的圣人。然后它将在游戏的顶部。
您可以创建一些 Window 演员,并将暂停项目添加到其中。然后,当游戏暂停时,您将其添加/使其在您的舞台上可见。
一些示例代码:
public class GameScreen implements Screen {
private Stage mystage;
public static final int GAME_RUNNING = 0;
public static final int GAME_PAUSED = 0;
private int gamestatus;
// ...
public void render(float deltaTime) {
// draw game normally, probably shouldn't update positions etc. if
// the game is paused..
if (pausebutton is pressed) {
pauseGame();
}
if (gamestatus == GAME_PAUSED) {
// draw pause screen
}
}
public void pauseGame() {
gamestatus = GAME_PAUSED;
}
// this is called by android
public void pause() {
pauseGame();
}
}
不是一个完整的示例,但显示了基本逻辑。
于 2012-07-13T12:25:57.567 回答
1
声明它
public static final int GAME_READY = 0;
public static final int GAME_RUNNING = 1;
public static final int GAME_PAUSED = 2;
public static final int GAME_OVER = 4;
public static int state;
并在更新方法中
switch (state) {
case GAME_READY:
updateReady();
break;
case GAME_RUNNING:
updateRunning(delta);
break;
case GAME_PAUSED:
updatePaused();
break;
case GAME_OVER:
gameOver = true;
updateGameOver();
break;
}
这肯定会对你有所帮助。
于 2013-04-11T12:23:44.847 回答
1
boolean GAME_PAUSED = false;
if (GAME_PAUSED) {
//Do not update camera
batch.begin();
resumeButton.draw(batch);
batch.end();
} else {
//Update Camera
Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
world.step(1/60f, 8, 3);
camera.update();
debugRenderer.render(world, camera.combined);
//Do your game running
}
于 2015-05-17T04:10:57.553 回答