Zii*_*iii 3 java time logic android libgdx
在LibGdx中,当用户暂停屏幕/离开应用程序暂时(这样的来电)时,有没有办法暂停增量时间?举例来说,当显示消息需要10秒才能让用户阅读消息时,通常情况下,我会将消息显示为开始时间,在render()中进行计算以获取经过的时间(currentTime - MessageStartedTime),如果已用时间> 10秒,然后关闭消息,一切正常,对.对这种情况进行成像,用户正在读取消息(假设经过的时间是2秒),一个持续20秒的来电,当进程返回我的应用程序时,经过的时间> 10秒,因此消息将是即使消息仅显示2秒,也会将其删除.
所以,我的问题是,是否有一个主时间计数器,我可以在我的应用程序中实现这种目的?什么是实施它的最佳方式?
我有两种游戏状态,它们是:
GAME_RUNNING
GAME_PAUSED
Run Code Online (Sandbox Code Playgroud)
当pause()调用时我将状态设置为GAME_PAUSED和resume()调用时我将状态设置为GAME_RUNNING.
然后当我update()在我的游戏上运行时,我检查这个状态,如果它暂停,我将delta设置为0.
float deltaTime = game.state == GAME_PAUSED ? 0 : Gdx.graphics.getDeltaTime();
Run Code Online (Sandbox Code Playgroud)
这意味着当我的所有游戏对象都更新时,他们的更改会被0乘以并且没有任何变化.我们还可以添加一个条件,只在更新时更新deltaTime > 0.
如果你有一个计时器,你将以某种方式更新这个计时器:
public void update(World world, float delta) {
frameTimer += delta;
if( frameTimer >= rate / 1000) {
fireAtEnemy(world);
frameTimer = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
因为delta现在为0,所以计时器不会增加而不会增加,直到游戏状态恢复到GAME_RUNNING之后resume().
此外,您可以添加一个额外的状态,例如GAME_RUNNING_FAST,当设置此状态时,您可以将乘以deltaTime2.如果你有相对于你的所有更新,deltaTime那么你的整个游戏将以双倍的速度运行.如果这是你想要的东西.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |