SpriteKit - 为啥我的游戏会随着新 iOS 版本的发布而出现错误?
Posted
技术标签:
【中文标题】SpriteKit - 为啥我的游戏会随着新 iOS 版本的发布而出现错误?【英文标题】:SpriteKit - why does my game develop bugs as new iOS versions are released?SpriteKit - 为什么我的游戏会随着新 iOS 版本的发布而出现错误? 【发布时间】:2016-06-14 20:49:27 【问题描述】:spritekit 实际上是如何工作的?框架代码是编译到应用程序中还是 ios 本身的一部分。我注意到每次 iOS 有重大更新时,我发现自己不得不重写一堆代码并修复我的 spritekit 游戏中的错误。这是为什么呢?
【问题讨论】:
【参考方案1】:SpriteKit 运行时环境位于手机上,而不是您应用的一部分。这节省了空间(否则每个应用程序都将包含他们使用的所有运行时库的副本,从而导致大量重复)但可能导致您遇到的那种问题,运行时更新可能会“破坏”应用程序以前工作过。
这是因为当您调用 iOS 函数(在 SpriteKit、UIKit 等中)时,您的代码会分支到存储在手机本身中的一些代码。如果此代码发生更改(通过 iOS 更新)并且突然需要 CGVector 而不是 CGPoint,或者函数调用的第三个参数,则程序将失败。
一些编译器能够将运行时库“绑定”到可执行文件中,从而使应用程序对操作系统升级更具弹性,但这可能会产生连锁反应,例如运行时运行的程序是几年(我处理过的一些代码甚至几十年)不再起作用(Y2K 提供了这方面的示例,大型机上的 IBM COBOL 运行时环境的旧版本不符合 Y2K)并带来应用程序与仅针对运行时的一个增量版本进行更新相比,更新是一项艰巨的工作。
【讨论】:
这是一种描述静态库和动态库之间差异的笨拙方式,它是一个链接器,而不是编译器,可以执行这些操作。 我并不想详细介绍编译器和绑定器之间的区别,因为大多数人只是认为他们的程序是“编译的”。我也不是在谈论动态和静态子例程之间的区别,而是在驻留和非驻留运行时库之间。【参考方案2】:它是 iOS 的一部分。您可以通过在 Info.plist 中设置 PrefersOpenGL=YES 标志来使用 iOS 9.X 中以前的 OpenGL 模式,更多信息请参阅https://***.com/a/37768928/763355
【讨论】:
感谢您的回答。唯一的问题是渲染器吗?似乎 spritekits 对象的功能在版本之间也发生了变化以上是关于SpriteKit - 为啥我的游戏会随着新 iOS 版本的发布而出现错误?的主要内容,如果未能解决你的问题,请参考以下文章
在 ios8 中使用 appdelegate 暂停 spritekit 游戏
swift spritekit 随着游戏时间的推移增加重力?
为啥我的声音让我的游戏在 Swift Spritekit 中滞后?