【发布时间】:2019-04-18 16:05:01
【问题描述】:
我正在使用 LibGDX 在 Android Studio 中制作游戏,并尝试在游戏主屏幕的上角添加一个暂停按钮。到目前为止,我的游戏一直很好地暂停,但我只是在按下一个键时才暂停。现在我想添加一个按钮,我在右上角得到了要渲染的按钮,但是当我按下它时它只能工作一次。我第一次按下它时,我的游戏暂停正常。但是每次我尝试在那之后暂停它,它都不起作用。我使用了大量的日志语句和调试,发现按下一次后,监听器甚至根本没有检测到按钮被按下,所以我相信这就是我的问题所在。
这就是我在 HUD 类中创建按钮的方式,该类始终在屏幕上打印分数:
TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal("Buttons.pack"));
Skin skin = new Skin();
skin.addRegions(buttonAtlas);
ImageButton.ImageButtonStyle style = new ImageButton.ImageButtonStyle();
style.imageUp = skin.getDrawable("PauseButton");
style.imageDown = skin.getDrawable("PauseButton");
style.imageChecked = skin.getDrawable("PauseButton");
button = new ImageButton(style);
然后我添加了一个监听器来检查按钮是否被点击:
button.addListener(new ClickListener()
{
@Override
public void clicked(InputEvent event, float x, float y)
{
Gdx.app.log("","Button was pressed");
pauseGame();
}
});
Listener检测到按钮被点击后调用的方法pauseGame():
public void pauseGame()
{
Gdx.app.log("","Game should be pausing");
screen.pauseGame();
}
screen 是一个名为 PlayScreen 的类,它是我的游戏的主游戏屏幕,它的 pauseGame() 方法运行良好。按下暂停键之前的游戏如下(你可以看到右上角的暂停键,请原谅图形,它们只是占位符,直到我制作并添加我自己的图形): Game before pause
在我的主 PlayScreen 类中,这是我的 pauseGame 方法:
public void pauseGame()
{
gamePaused = true;
if(music.isPlaying())
{
musicType = type.NORMAL;
music.pause();
}
else if(barrageMusic.isPlaying())
{
musicType = type.BARRAGE;
barrageMusic.pause();
}
createPauseWindow();
}
然后在我的渲染方法中,我调用了另一个名为 update 的方法。在这种方法中,我更新了我的视口、我的 HUD,并创建了新的敌人。这是唯一在 gamePaused 为真时停止调用的方法。我的其余渲染和其他必要的更新仍在进行。我一直在尝试解决这个问题,但无论我重写代码以暂停游戏或制作不同的听众有多少不同的方式,暂停按钮只能工作一次,然后再也不会。
【问题讨论】:
-
在游戏暂停时您是否停止执行游戏逻辑?
-
显示屏幕的 pauseGame 方法
-
@QBrute,我不会停止我所有的游戏逻辑,无论如何,当游戏恢复时,任何逻辑都会重新启动。当我第二次尝试暂停游戏时,它不起作用。
标签: java android libgdx imagebutton