我正在创建一个 SceneKit 游戏,今天遇到了这个问题。该游戏在任何 iOS 9 及更高版本中都可以正常运行,但旧版本是个大麻烦。基本上游戏在 iOS 8 上看起来只是一个空白的 SpriteKit 场景(我将背景设置为白色所以它是白色的)并且由于某种原因没有渲染任何东西。想不通是什么原因,谁知道这是为什么?我搜索了这个但没有找到任何东西。哦,我的部署目标是 iOS 7.1,但我没有任何设备可以在 iOS 7 atm 上进行测试,所以这也可能是一个问题。
我还尝试创建一个模板游戏项目(它甚至包含 iOS 9 相关代码,大声笑)但是当我尝试运行它时会抛出此错误:*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException',原因:'*** -[NSKeyedUnarchiver decodeObjectForKey:]: 无法解码类 (SKCameraNode) 的对象'
。即使我删除了相机节点复选框,它仍然会抛出这个错误,我不知道除了放弃对 iOS 7 和 8 的支持之外该怎么做,我真的不想这样做:(
最佳答案
您可能在场景中使用了 iOS 7 或 8 不可用的功能。您可以将某些代码块声明为仅针对某些 iOS 版本激活,但如果您正在使用诸如相机节点之类的关键功能,那么您可能需要增加部署目标,或使用老式相机。
此链接展示了如何实现老式相机: https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Actions/Actions.html
你可以使用 https://objectivec2swift.com/#/home/converter/如果需要,将代码片段转换为 Swift。
如果您没有使用相机节点,请尝试检查您的 .sks 文件中是否有任何对相机节点的引用。有一个名为“使用相机”的选项默认情况下会在编辑器中为您的基本场景选中,无论你是否做过:
我发现没有代码行堆栈跟踪的随机错误通常是由 .sks 或其他非 swift 文件类型 <.<()
引起的更新:
在仔细研究之后,这似乎是一个错误或没有明确解决方案的问题。我的最后两个解决方案是:
放弃 iOS 7,看看 iOS 8+ 是否给您错误(无论如何我认为 8 是最低目标)..用户和功能太少我怀疑它是否值得支持 7...但是,如果你必须:
下载 Xcode 7(或更早版本)并简单地创建两个项目。 http://adcdownload.apple.com/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg
如果您选择这条路线,我建议您在 XC7 中进行开发,这样您就可以在 iOS 9/10 之间共享 Swift 2.3 代码,或者稍后使用内置功能转换为 swift 3。
关于ios - SpriteKit 场景在 iOS 8 上是空白的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42532142/