Когда я пытался добавить разные сцены в свою игру на Swift, я столкнулся с методом unarchiveFromFile. Проблема этого метода в том, что он работает только с классом GameScene. Если вы позвоните из
extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
let skView = self.view as SKView
skView.ignoresSiblingOrder = true
skView.presentScene(scene)
}
// This won't work for MenuScene.unarchiveFromFile("MenuScene") as? MenuScene
// nor MenuScene.unarchiveFromFile("MenuScene") as? GameScene
Чтобы иметь возможность работать с другими SKScene, я изменил все вхождения класса GameScene на SKScene. Хотя теперь он работает с другими классами SKScene, я до сих пор не понимаю, что это такое.
Для чего этот метод? я должен держать его?