Есть ли способ объединить/кешировать SKReferenceNodes в SpriteKit с помощью Swift?Swift/SpriteKit - Любой способ объединения/кэширования SKReferenceNodes?
Я создаю игру, используя редактор визуального уровня xCodes. Я создаю различные файлы .sks с визуальным редактором уровня, которым я являюсь, чем вызов кода, когда мне это нужно. Я называю их кодом, потому что я использую их для создания случайных уровней или препятствий, поэтому мне не нужно, чтобы все они были добавлены в сцену сразу.
На данный момент я делаю это, как этот
создать убедить Init метод SKReferenceNodes инициализировать их с URL. Я делаю это, потому что есть некоторая ошибка, вызывающая SKReferenceNodes по имени файла напрямую (https://forums.developer.apple.com/thread/44090). Использование такого расширения делает код немного чище.
extension SKReferenceNode {
convenience init(roomName: String) {
let path: String
if let validPath = NSBundle.mainBundle().pathForResource(roomName, ofType: "sks") {
path = validPath
} else {
path = NSBundle.mainBundle().pathForResource("RoomTemplate", ofType: "sks")! // use empty roomTemplate as backup so force unwrap
}
self.init(URL: NSURL(fileURLWithPath: path))
}
}
и чем в моих сценах я могу создать их и добавить их как так (примерно каждые 10 секунд)
let room = SKReferenceNode(roomName: "Room1") // will cause lag without GCD
room.position = ...
addChild(room)
Это работает нормально, но я получаю некоторое отставание/заикания при их создании. Поэтому я использую GCD, чтобы уменьшить это, чтобы в принципе не заикаться. Он работает хорошо, но мне интересно, могу ли я предварительно загрузить все файлы .sks.
Я попытался использовать массивы, чтобы сделать это, но я получаю сбои, и он просто не работает (я также получаю сообщение, уже добавляющее узел с родителем).
Я пытался поджать их, как это в приложение запуска
let allRooms = [SKReferenceNode]()
for i in 0...3 {
let room = SKReferenceNode(roomName: "Room\(i)")
allRooms.append(room)
}
и чем использовать массив, когда мне нужно тоже. Однако это не работает, и я получаю сбой при попытке использовать такой код
let room = allRooms[0]
room.position =
addChild(room) // causes error/crash -> node already has parent
Кто-нибудь сделал что-то подобное? Есть ли другой способ я могу объединить/кешировать эти ссылочные узлы ?. Я что-то пропустил?
Эй, большое спасибо за ваш ответ. Я только что разобрался в своих проблемах, теперь я только что написал ответ. Еще раз спасибо за ваши усилия. – crashoverride777
Добро пожаловать, спасибо вам, чтобы поделиться своим опытом :) –
Еще раз спасибо за вашу помощь. – crashoverride777