Я не делаю никаких баров прогресса, так как мои уровни занимают около секунды, чтобы загрузить. У меня есть плавный переход между уровнями. Прежде чем я делал так, моя игра застыла на мгновение в переходе, потому что ему пришлось загружать все ресурсы в тот же поток, что и моя игра.
Я создаю статический метод в своем классе для предварительной загрузки ресурсов ,
// 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)
})
Я сделал предварительный загрузчик и могу опубликовать код для этого, но я не знаю, как сделать индикатор выполнения. Мне было бы интересно увидеть это. – hamobi
Было бы неплохо, если бы вы могли опубликовать код или только соответствующие части, потому что в этом нет много учебников. Но это зависит от вас ... Во всяком случае, я обновлю сообщение, если найду что-то интересное, но я уверен, что есть способ сделать это с помощью большой центральной отправки ... – Whirlwind