在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 中的一个功能?