我只想问一下Apple提供的SpriteKit官方更新功能与raywenderlich提供的更新功能有什么区别。我为什么要使用self.lastUpdate时间而不是普通变量?这是我的代码:
import SpriteKit
class GameScene: SKScene {
private var lastUpdateTime: TimeInterval = 0
private var dt: TimeInterval = 0
override func update(_ currentTime: TimeInterval){
if lastUpdateTime > 0 {
dt = currentTime - lastUpdateTime
}
else {
dt = 0
}
lastUpdateTime = currentTime
print("\(dt * 1000) in miliseconds since last update")
}}
这是官方功能
import SpriteKit
class GameScene: SKScene {
private var lastUpdateTime : TimeInterval = 0
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
// Initialize _lastUpdateTime if it has not already been
if (self.lastUpdateTime == 0) {
self.lastUpdateTime = currentTime
}
// Calculate time since last update
let dt = currentTime - self.lastUpdateTime
// Update entities
for entity in self.entities {
entity.update(deltaTime: dt)
}
self.lastUpdateTime = currentTime
}
}
答案 0 :(得分:1)
在您使用它的情况下,self.lastUpdateTime
和lastUpdateTime
之间没有区别。这是个人偏好的问题。
有几种情况需要区分:
如果参数正在遮蔽属性。这通常发生在初始化程序中,例如
class Foo
{
var property: Int
init(property: Int)
{
self.property = property
}
}
自我在闭包中是强制性的,以提醒您可能存在强烈的参考周期。
class Foo
{
var property: Int = 1
func bar()
{
DispatchQueue.main.async
{
print("\(self.property)") // self required here
}
}
}
除此之外,请使用self
或不要使用self
。在Swift演化的早期阶段,有人建议self
强制要求进行财产访问。战斗是漫长而痛苦的,但最终非强制性的一方赢得了争论,所以要把自己打倒。