实现异步线程(使用Swift的Xcode)

时间:2017-07-18 03:25:24

标签: swift asynchronous sprite-kit

我在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可能会帮助解决这个问题。我想知道是否有人知道如何为我的结构实现它。

感谢您的帮助!

2 个答案:

答案 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")
        }
    }
}