我试图通过重构我的旧游戏来学习swift,我需要重写计算delta时间的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!)
}
}
答案 0 :(得分:5)
此问题属于codereview。但我只是在这里发表回答,并希望它会随着问题一起迁移到正确的地方。
你有一些冗余代码,这是我的第一次迭代重写
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)