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

oxf4rvwz  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(157)

我试图在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
            }
lc8prwob

lc8prwob1#

我总是使用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)
zu0ti5jz

zu0ti5jz2#

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

override func update(_ currentTime: CFTimeInterval) {
      let elpasedTimeSinceLastupdate = currentTime - startTime
      //Check if enough time has elapsed otherwise there is nothing to do
      guard elpasedTimeSinceLastupdate > requiredTimeIntervale else {
        return
      }
      startTime = currentTime
      // Do stuff here
  }

如果你想要一个以上的定时器,那么你需要维护一个定时器数组和一个时间间隔表以及调用的块。这会变得非常复杂,你应该使用iOS 10中内置的块定时器,它更简单:

_ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
        //Do stuff every second here
    }
vs3odd8k

vs3odd8k3#

currentTime: number = 0;
    
update(delta) {
    this.time += delta / 1000;
    GameCurrentData.time = Math.floor(this.time);
           
            
    if(this.currentTime !== GameCurrentData.time){
        Globals.emitter?.Call?.("perSecond");
        this.currentTime = GameCurrentData.time;
    }

}

相关问题