在后台线程中运行 SpriteKit 进程以提高 CPU 使用率
Runnning SpriteKit processes in background threads to improve CPU usage
我正在使用 Swift 和 SpriteKit 构建我的第一款游戏,我在 CPU 使用和电池寿命方面遇到了很多问题。我想知道 运行 某些任务是否是常见的做法,例如在后台线程中实例化坏人;如果是这样,我将如何实施呢?
如果这是您的第一款游戏,除非您真的知道自己在做什么,否则您可能不想为多线程而疯狂。请注意,操作 SKNode
必须在 SKView(Private) _update:
与 运行 相同的线程上完成。这是 runAction
块在 运行 上的同一个线程。如果你不这样做,你就会崩溃。在我正在开发的 SpriteKit 游戏中,我是多线程的,没有使用 SKAction
或 runAction
进行任何更新。我不得不最终添加 runAction
用于树管理。因此,我目前正在用 OpenGL 重写它。
有些任务需要卸载,例如加载文件甚至网络调用。您应该将 GCD 用于这些类型的事情。请记住,多线程不会像您想象的那样减少 CPU 时间。
很可能您的代码正在做一些不好的事情,导致您浪费 CPU 时间。即使你是多线程,你最终也会得到同样高的 CPU 但调试更困难的问题。请注意,我并不是说这是不可能的。
花时间弄清楚 CPU 使用率高的真正原因。根据您的其他线程,您没有做很多事情。
作为实验,拿那个宇宙飞船例子 运行 在你的设备上。继续添加船只,看看它对 CPU 做了什么。找出在 CPU 和 FPS 降低之前必须添加多少。将其与您的游戏进行比较,请记住宇宙飞船示例只是一个简单的演示。
我正在使用 Swift 和 SpriteKit 构建我的第一款游戏,我在 CPU 使用和电池寿命方面遇到了很多问题。我想知道 运行 某些任务是否是常见的做法,例如在后台线程中实例化坏人;如果是这样,我将如何实施呢?
如果这是您的第一款游戏,除非您真的知道自己在做什么,否则您可能不想为多线程而疯狂。请注意,操作 SKNode
必须在 SKView(Private) _update:
与 运行 相同的线程上完成。这是 runAction
块在 运行 上的同一个线程。如果你不这样做,你就会崩溃。在我正在开发的 SpriteKit 游戏中,我是多线程的,没有使用 SKAction
或 runAction
进行任何更新。我不得不最终添加 runAction
用于树管理。因此,我目前正在用 OpenGL 重写它。
有些任务需要卸载,例如加载文件甚至网络调用。您应该将 GCD 用于这些类型的事情。请记住,多线程不会像您想象的那样减少 CPU 时间。
很可能您的代码正在做一些不好的事情,导致您浪费 CPU 时间。即使你是多线程,你最终也会得到同样高的 CPU 但调试更困难的问题。请注意,我并不是说这是不可能的。
花时间弄清楚 CPU 使用率高的真正原因。根据您的其他线程,您没有做很多事情。
作为实验,拿那个宇宙飞船例子 运行 在你的设备上。继续添加船只,看看它对 CPU 做了什么。找出在 CPU 和 FPS 降低之前必须添加多少。将其与您的游戏进行比较,请记住宇宙飞船示例只是一个简单的演示。