使用Swift计算SpriteKit中的增量

使用Swift计算SpriteKit中的增量,swift,sprite-kit,Swift,Sprite Kit,我试图通过重构我的一个旧游戏来学习swift,我需要重写我的update方法,该方法计算增量时间。这个代码可以工作,但很难看。我该如何正确地重写这篇文章呢 import SpriteKit class GameScene: SKScene { var lastUpdateTimeInterval: CFTimeInterval? override func update(currentTime: CFTimeInterval) { var delta: CF

我试图通过重构我的一个旧游戏来学习swift,我需要重写我的
update
方法,该方法计算增量时间。这个代码可以工作,但很难看。我该如何正确地重写这篇文章呢

import SpriteKit

class GameScene: SKScene {
    var lastUpdateTimeInterval: CFTimeInterval?

    override func update(currentTime: CFTimeInterval) {

        var delta: CFTimeInterval?
        if let luti = lastUpdateTimeInterval {
            delta = currentTime - luti
        } else {
            delta = currentTime
        }

        lastUpdateTimeInterval = currentTime;

        if (delta > 1.0) {
            delta = minTimeInterval;
            lastUpdateTimeInterval = currentTime;
        }

        updateWithTimeSinceLastUpdate(delta!)
    }
}
这个问题属于我。但我只是把答案贴在这里,希望它能和问题一起迁移到正确的地方

你有一些多余的代码,这是我的第一次迭代重写

class GameScene: SKScene {
    var lastUpdateTimeInterval: CFTimeInterval?

    override func update(currentTime: CFTimeInterval) {

        var delta: CFTimeInterval = currentTime // no reason to make it optional
        if let luti = lastUpdateTimeInterval {
            delta = currentTime - luti
        }

        lastUpdateTimeInterval = currentTime

        if delta > 1.0 {
            delta = minTimeInterval
            // this line is redundant lastUpdateTimeInterval = currentTime
        }

        updateWithTimeSinceLastUpdate(delta)
    }
}
并进一步简化

class GameScene: SKScene {
    var lastUpdateTimeInterval: CFTimeInterval = 0

    override func update(currentTime: CFTimeInterval) {

        var delta: CFTimeInterval = currentTime - lastUpdateTimeInterval

        lastUpdateTimeInterval = currentTime

        if delta > 1.0 {
            delta = minTimeInterval
        }

        updateWithTimeSinceLastUpdate(delta)
    }
}
您可以将
if
替换为
?:
,但有些人只是出于某种原因讨厌它

updateWithTimeSinceLastUpdate(delta > 1.0 ? minTimeInterval : delta)

对于工作代码,如果delta>=1.0,如果他想确保刚好过了一秒钟,不是应该是