java - LibGDX 在暂停时停止时间计数器

标签 java android time logic libgdx

在 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/

相关文章:

java - 从 Java 检索在网页上动态呈现的 SVG

java - Java 中的奇怪行为

java - 正则表达式删除嵌套括号

android - 从 alertDialog 构建器获取 editText 值

powershell - 查询域 Controller 和NTP服务器时间w32tm/显示器格式输出

C++ 结构 : repeat set of functions at a certain time rate

java - 在本地主机上打开 JNLP 错误

java - 我在我的电脑上找不到 Android SDK

android - Mapbox 'setMyLocationEnabled' 不工作

javascript - 无论本地时区如何,都获得赫尔辛基本地时间