例:
有一个炸弹(如反恐精英 )在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%的偏好。