1

SpriteKit我正在开发的游戏中,我从Thread Sanitizer.

一些精灵的一些属性以及GameScene通过玩家交互异步更新的属性,例如玩家的速度。

当然,这些值将被代码的其他部分读取,例如在场景的 .update 方法中。

对于一些更经常调用的属性,我编写了一个 getter/setter 方法来同步对数据的访问,如下所示:

class PoliceSprite: SKSpriteNode {

    private var _policeSpeed: CGFloat = 0

    private var accessQueue = DispatchQueue(label: "policeAccessQueue", qos: .userInteractive, attributes: .concurrent)

    var policeSpeed: CGFloat {
    
        get {
            var returnValue: CGFloat = 0
            accessQueue.sync {
                returnValue = _policeSpeed
            }
            return returnValue
        }
    
        set {
            accessQueue.async(flags: .barrier) {
                self._policeSpeed = newValue
            }
        }
    }
}

但是我想知道我是否必须对代码中的每个值都这样做——它看起来很笨拙,而且我还没有遇到任何需要如此大量同步工作的示例或教程代码。

我的问题:

是否有以线程安全的方式处理游戏统计数据的最佳实践?甚至可能是我不知道的 SpriteKit API 中的一个功能?

4

0 回答 0