我在Xcode中创建了一个目前使用SpriteKit中的update
函数大量实现的游戏。它看起来像这样:
override func update(_ currentTime: TimeInterval) {
if(gameStatus == status.preGame){
//function calls here
}
else if(gameStatus == status.startUp){
//function calls here
}
else if(gameStatus == status.inGame){
//heavy function calls here
}
}
当它在游戏中时,有多个调用以便随机创建节点并移动它们等。我遇到了异步线程,我搜索了互联网,试图找出如何实现它们,但我找不到任何能帮助我找到我想要的东西。
由于我目前的实施方式,我遇到了一些滞后问题,并且我被告知Async可能会帮助解决这个问题。我想知道是否有人知道如何为我的结构实现它。
感谢您的帮助!
答案 0 :(得分:0)
DispatchQueue.global(qos: .background).async {
if(gameStatus == status.preGame){
//function calls here
}
else if(gameStatus == status.startUp){
//function calls here
}
else if(gameStatus == status.inGame){
//heavy function calls here
}
DispatchQueue.main.async {
}
}
答案 1 :(得分:0)
首先,这只有在您阻止主线程上的操作时才有用。您还需要注意,您的操作不会比完成后更频繁地被解雇等等。
操作队列可以帮助解决这个问题,显然你只需要在“重负载”的情况下采用异步(因为启动过程中可能不需要复杂性
lazy var updateQueue:OperationQueue = {
var queue = OperationQueue()
queue.name = "Update Game"
queue.maxConcurrentOperationCount = 1
return queue
}()
override func update(_ currentTime: TimeInterval) {
switch gameStatus {
case .preGame:
//function calls here
break
case .startUp:
//function calls here
break
case .inGame:
self.updateQueue.addOperation(){
//heavy function calls here
print("hello")
}
}
}