Я не делаю никаких индикаторов выполнения, так как мои уровни загружаются примерно за секунду. У меня плавный переход между уровнями. До того, как я поступал таким образом, моя игра на мгновение зависала в переходе, потому что ей приходилось загружать все ресурсы в том же потоке, что и моя игра.
Я создаю в своем классе статический метод для предварительной загрузки ресурсов.
// config is a struct with many parameters
class func createResources(config: HyperSceneConfig, withCompletion: (scene: HyperScene) -> ()){
// load resources on other thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
let hyperScene = HyperScene(config: config)
// callback on main thread
dispatch_async(dispatch_get_main_queue(), {
// Call the completion handler back on the main queue.
withCompletion(scene: hyperScene)
});
})
}
мои сцены запускаются
init(config: HyperSceneConfig) {
super.init(size: config.size, viewController: config.viewController)
self.backgroundColor = SKColor.blackColor()
self.levelTime = 200
// this is where i do all my setup before the scene is presented
self.setupScene()
}
вот как я представляю свою сцену в своем gameViewController.
Вы можете сделать то же самое в сцене, чтобы загрузить следующий уровень. Это здорово, потому что вы можете создать плавный переход между уровнями, поскольку все загружается в другом потоке.
HyperScene.createResources(hyperConfig, withCompletion: {
scene in
self.scene = scene
self.scene.scaleMode = .AspectFill
self.skView.presentScene(self.scene)
self.view.addSubview(self.skView)
})
person
hamobi
schedule
01.01.2015