如何在Swift中使用deltaTime正确计算1秒

时间:2016-12-29 03:45:33

标签: swift sprite-kit

我试图计算deltaTime中经过的秒数,但我不知道该怎么做,因为我的deltaTime会不断打印0.0166或0.0167。

这是我的代码:

override func update(_ currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    deltaTime = currentTime - lastTime
    lastTime = currentTime

我如何制作它以便我可以在这里挤压一些逻辑来每秒运行一次?

编辑:我能够提出以下内容,但有更好的方法吗?

            deltaTimeTemp += deltaTime
            if (deltaTimeTemp >= 1.0) {
                print(deltaTimeTemp)
                deltaTimeTemp = 0
            }

2 个答案:

答案 0 :(得分:4)

我总是将SKActions用于此类事情:(用swift 3编写)

let wait = SKAction.wait(forDuration: 1.0)
let spawnSomething = SKAction.run {
   //code to spawn whatever you need
}

let repeatSpawnAction = SKAction.repeatForever(SKAction.sequence([wait, spawnSomething]))

self.run(repeatSpawnAction)

答案 1 :(得分:0)

如果你真的只关心1秒的间隔,那么你不应该为每一帧存储增量。只需存储开始时间并计算每帧的经过时间。当经过的时间超过1秒的间隔时,则将开始时间重置为现在。

<script src="level1.js"></script>
<script src="level2.js"></script>
<script src="winLose.js"></script>
<script src="mainState.js"></script>

理想情况下,您需要超过1个计时器,因此您需要维护一组计时器以及一个要调用的间隔和块表。这开始变得非常复杂,实际上你应该只使用iOS 10中的内置块Timer,这更直接:

game.state.start(name_of_state);