要实现一个到期的游戏对象,我应该存储开始时间和总计,还是保存剩余的时间?

例:
有一个炸弹(如反恐精英 )在45秒后爆炸。 我是不是该-

  • 将45秒保存在一个variables中,并在每次更新时减去该时间
  • 存储炸弹播种的时间,并在每次更新时检查是否小于或等于当前时间减去45秒?

我如何select使用哪种方法?

没有“最好”的方法来做到这一点,两种方法都是完全可行的和个人偏好。 不过,我相信delta时间版本比较好,因为它比检查时间差异本质上更不容易出错。

想象一下这段伪码:

startTime = System.now function update() { now = System.now difference = now - startTime if (difference >= 45) { explode() } } 

这会很好,并会让炸弹在45秒后爆炸。 不过要想想如果我们想暂停我们的游戏会发生什么。 暂停游戏只是停止移动,或者可能将增量时间设置为0来模拟没有时间经过。 这会打破这个系统,因为即使你暂停你的游戏,系统时间也不会停止。

当然这很容易通过使用自己的时间系统来解决(类似于Unity所做的那样),但是,真的,如果您可以select不太容易出错的方式,那么为什么呢?

Delta时间比检查时差更“安全”。 如果我们转换上面的伪代码,它会看起来像这样:

 countDown = 45 function update(delta) { countDown -= delta if (countDown <= 0) { explode() } } 

这比时差更安全,因为如果你使用delta操纵暂停你的游戏,这也会暂停你的炸弹定时器。

如果你想改变你的炸弹定时器的速度 – 比如说把它加快2倍,你只需要乘以你的speed值就可以增加delta值。 与增量时间方法相比,使用时间差异更加难以完成,代码明显更less。

两者都是完全可行的,都是最好的。

对于我的口味,我会去与更新()和减lessTimeDeltaTime 45秒的浮动 – 但这只是100%的偏好。