В моем проекте создания спрайтов у меня есть файл сценария .sks, который содержит наземную физику и фоновую графику. Сцена будет загружена из этого файла. Он также содержит пустой узел, называемый контейнером. У меня есть еще один файл .sks для каждого уровня, который содержит блоки и врагов. Когда моя сцена инициализирована, я загружаю уровень из одного из моих .sks-файлов уровня (отбрасывая SKScene в SKNode) и добавляю в пустой узел «контейнер». Я использую этот код:SpriteKit добавляет детей одного узла к другому
import SpriteKit
extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(SKNode.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
class GameScene: SKScene {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.childNodeWithName("//container")?.addChild(SKNode.unarchiveFromFile("level1")!)
}
override class func unarchiveFromFile(file : NSString) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: 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
}
}
}
Однако это означает, что есть пустой неиспользованный узел в иерархии узлов:
Scene
-background
-ground
-container
--level scene(cast to SKNode) <- empty node here
---block
---enemy
поэтому мой вопрос: как я могу добавить ребенок одного узла к другому?
Я не могу сразу установить свойство детей (не назначаемое)
Я не могу заменить узел контейнера, как я потеряю все свои свойства
Благодаря-это должно быть легко портировать на быстрое и спрайт комплект очень похож в некоторых частях на cocos2d – Okapi