Я делаю инфраструктуру SpriteKit, используя swift 4.2, и хочу включить некоторые файлы .sks для сцен и действий.Я попытался загрузить сцену из пакета, используя код ниже:
class func newGameScene() -> GameScene {
guard let gameScenePath = Bundle(for: self).path(forResource: "GameScene", ofType: "sks") else { assert(false) }
guard let gameSceneData = FileManager.default.contents(atPath: gameScenePath) else { assert(false) }
let gameSceneCoder = NSKeyedUnarchiver(forReadingWith: gameSceneData)
guard let scene = GameScene(coder: gameSceneCoder) else { assert(false) }
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
return scene
}
Я загружаю сцену и представляю ее.(Этот код в основном взят из шаблона Apple для SpriteKit, так как я тестирую эту проблему.)
guard let view = view else {
return nil
}
let scene = GameScene.newGameScene()
view.presentScene(scene)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
return nil
В этом случае GameScene.sks и код не отличаются от шаблона Apple.Этот код и активы .sks находятся в динамической среде и импортированы в другой проект.
Когда платформа загружает сцену в представление, которое я передаю, оно показывает количество кадров в секунду и число узлов, но не «Hello»., Мир!"текст.
В приведенном ниже коде, также скопированном из шаблона, точка останова показывает, что они не вызываются при отключении мыши.
#if os(OSX)
// Mouse-based event handling
extension GameScene {
override func mouseDown(with event: NSEvent) {
if let label = self.label {
label.run(SKAction.init(named: "Pulse")!, withKey: "fadeInOut")
}
self.makeSpinny(at: event.location(in: self), color: SKColor.green)
}
override func mouseDragged(with event: NSEvent) {
self.makeSpinny(at: event.location(in: self), color: SKColor.blue)
}
override func mouseUp(with event: NSEvent) {
self.makeSpinny(at: event.location(in: self), color: SKColor.red)
}
}
#endif
Я знаю, что это должно быть связано с загрузкой SpritKit.сцена, но не может найти решение.Я должен использовать NSKeyedUnarchiver, потому что встроенный в SpritKit инициализатор файлов:
GameScene(fileNamed: "GameScene")
Загружается только из основного пакета.
Теперь в приведенном выше предположении, что файл можно загрузить с помощьюкодер, но Tomato указал, что sks, скорее всего, не был сохранен с помощью кодера.В этом случае может быть невозможно загрузить файл sks из другого пакета в sprite-kit, используя предоставленный API от Apple.Ответ может не включать кодеров.