在 LibGdx 中,有没有办法在用户临时暂停屏幕/离开应用程序(例如来电)时暂停增量时间?例如,当显示消息需要 10 秒供用户阅读消息时,通常,我会获取消息显示的开始时间,在 render() 中进行计算以获取耗时(currentTime - MessageStartedTime),如果耗时 > 10 秒,然后关闭消息,一切正常,对。设想这种情况,用户正在阅读消息(假设耗时为 2 秒),来电需要 20 秒,当进程返回到我的应用程序时,耗时 > 10 秒,因此消息将是即使消息仅显示 2 秒,也已删除。
所以,我的问题是,是否有我可以在我的应用程序中为此类目的实现的主计时器?实现它的最佳方式是什么?
最佳答案
我有两个游戏状态,它们是:
GAME_RUNNING
GAME_PAUSED
当 pause()
被调用时,我将状态设置为 GAME_PAUSED
,当 resume()
被调用时,我将状态设置为 GAME_RUNNING
。
然后当我在我的游戏上运行 update()
时,我检查这个状态,如果它暂停了,我将 delta 设置为 0。
float deltaTime = game.state == GAME_PAUSED ? 0 : Gdx.graphics.getDeltaTime();
这意味着当我所有的游戏对象更新时,它们的变化乘以 0 并且没有任何变化。我们还可以添加一个条件,仅在 deltaTime > 0
时更新。
如果你有一个计时器,你将以某种方式更新这个计时器:
public void update(World world, float delta) {
frameTimer += delta;
if( frameTimer >= rate / 1000) {
fireAtEnemy(world);
frameTimer = 0;
}
}
因为增量现在为 0,所以计时器不会增加,直到游戏在 resume()
之后返回到 GAME_RUNNING
时才会增加。
此外,您可以添加一个名为 GAME_RUNNING_FAST
的额外状态,当设置此状态时,您可以将 deltaTime
乘以 2。如果您拥有与 deltaTime
相关的所有更新,那么您的整个游戏将以双倍速度运行。如果这是您想要的。
关于java - LibGDX 在暂停时停止时间计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368561/