使用Swift计算SpriteKit中的Delta

3

我试图通过重构我的一款旧游戏来学习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!)
    }
}

1
对于可工作的代码,请访问http://codereview.stackexchange.com/ - Bryan Chen
1个回答

7
这个问题属于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,对吗? - STO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接