【问题标题】:Calculating delta in SpriteKit using Swift使用 Swift 在 SpriteKit 中计算增量
【发布时间】:2014-07-14 02:43:38
【问题描述】:

我正在尝试通过重构我的一款旧游戏来快速学习,我需要重写我的 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!)
    }
}

【问题讨论】:

标签: swift sprite-kit


【解决方案1】:

这个问题属于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)

【讨论】:

  • 如果他想确定一秒过去了,不应该是if delta >= 1.0吗?
猜你喜欢
  • 2016-02-23
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多