SpriteKit не может разархивировать подкласс SKEmitterNode из файла sks ⇐ IOS
SpriteKit не может разархивировать подкласс SKEmitterNode из файла sks
У меня есть следующий код:
последний класс PassthroughEmitterNode: SKEmitterNode { статическая загрузка функции (fnWithoutExtension: String, в комплекте: Bundle) -> SKEmitterNode? { сторожить пусть sksPath = Bundle.path(forResource: fnWithoutExtension, ofType: "sks"), пусть SksData = попробовать? Данные (contentsOf: URL (fileURLWithPath: sksPath)), пусть разархиватор = попробовать? NSKeyedUnarchiver (дляReadingFrom: sksData), пусть текстураPath = Bundle.path(forResource: fnWithoutExtension, ofType: "png"), пусть текстураImage = UIImage (contentsOfFile:texturePath) еще {возвратить ноль} // Требуется для декодирования в подкласс unarchiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKEmitterNode") пусть эмиттер = unarchiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) как? PassthroughEmitterNode unarchiver.finishDecoding() Guard let эмиттер else { return nil } // Нам все еще нужно установить текстуру, поскольку файл текстуры не находится в основном пакете эмиттер.particleTexture = SKTexture(изображение:textureImage) // Необходимо включить взаимодействие с пользователем, чтобы получать прикосновения эмиттер.isUserInteractionEnabled = правда обратный эмиттер } }
Это очень похоже на чтение экземпляра подкласса SKScene из файла SKS (например, использование файла sks с подклассом SKScene).
Однако это не работает. Декодирование разархиватора всегда возвращает ноль.
Но сама разархивация в класс SKEmitterNode работает. Подкласс не работает.
У меня есть следующий код:
последний класс PassthroughEmitterNode: SKEmitterNode { статическая загрузка функции (fnWithoutExtension: String, в комплекте: Bundle) -> SKEmitterNode? { сторожить пусть sksPath = Bundle.path(forResource: fnWithoutExtension, ofType: "sks"), пусть SksData = попробовать? Данные (contentsOf: URL (fileURLWithPath: sksPath)), пусть разархиватор = попробовать? NSKeyedUnarchiver (дляReadingFrom: sksData), пусть текстураPath = Bundle.path(forResource: fnWithoutExtension, ofType: "png"), пусть текстураImage = UIImage (contentsOfFile:texturePath) еще {возвратить ноль} // Требуется для декодирования в подкласс unarchiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKEmitterNode") пусть эмиттер = unarchiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) как? PassthroughEmitterNode unarchiver.finishDecoding() Guard let эмиттер else { return nil } // Нам все еще нужно установить текстуру, поскольку файл текстуры не находится в основном пакете эмиттер.particleTexture = SKTexture(изображение:textureImage) // Необходимо включить взаимодействие с пользователем, чтобы получать прикосновения эмиттер.isUserInteractionEnabled = правда обратный эмиттер } }
Это очень похоже на чтение экземпляра подкласса SKScene из файла SKS (например, использование файла sks с подклассом SKScene).
Однако это не работает. Декодирование разархиватора всегда возвращает ноль.
Но сама разархивация в класс SKEmitterNode работает. Подкласс не работает.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как заставить подкласс иметь определенный подкласс со свойством суперкласса?
Anonymous » » в форуме C# - 0 Ответы
- 51 Просмотры
-
Последнее сообщение Anonymous
-