SpriteKit 游戏中的高 CPU 使用率
Posted
技术标签:
【中文标题】SpriteKit 游戏中的高 CPU 使用率【英文标题】:High CPU use in SpriteKit game 【发布时间】:2016-09-05 21:37:10 【问题描述】:我正在使用 Swift 和 SpriteKit 制作我的第一款游戏,并注意到我的游戏很快就达到了 100% 的 CPU 使用率。我最近发布了很多关于此的内容,但现在我在这里尝试将其拆开以确定我的问题出在哪里。我最初认为我的问题在于实例化新敌人,所以我删除了除了用户控制的小型宇宙飞船及其射击功能之外的所有内容。但是,在“玩”了几分钟后,我仍然达到了 100%。我正在使用时间分析仪来尝试弄清楚发生了什么,但我遇到了麻烦。我已经打破了时间线:
这是用户点击homeScene
按钮进入GameScene
.时的第一个子图
我不完全确定 3256x 和 861x 的红色和黄色“Heaviest backtraces”分别是什么意思,但从我看过的教程中我可以想象它们异常高。这里也是调用树:
我也不完全确定为什么控制器纹理会使用这么多,因为它们只是在 GameScene
类之前的文件中设置两个纹理:
let controllerBaseTexture = SKTextureAtlas(named:"Sprites").textureNamed("controllerBase")
let controllerHandleTexture = SKTextureAtlas(named:"Sprites").textureNamed("controllerHandle")
class GameScene: SKScene, SKPhysicsContactDelegate
然后这里是游戏开始和 CPU 达到 100% 时的调用树:
我也对“UnsaveMutableAddressors”是什么感到困惑,因为我在尝试调试此代码时经常看到它们。
我知道这很多,但我不知道从哪里开始。任何建议都会很棒。我还想知道是否有很好的资源可以更好地解释这一点,因为我已经经历了一些,但我仍然很困惑。
感谢您的帮助!
【问题讨论】:
你真的数过startGame被调用的次数吗?理论上应该只调用一次吧? 您从每个 update() 调用中调用 GameScene.init。修复游戏的基本逻辑,因为这显然不是更新中的正确做法。 @MobileBen @MoDJ 你是在严格地谈论开始部分——在加载期间吗?因为那里有延迟,这是有道理的,但真正的问题是游戏期间的 CPU 使用(中间部分)没有任何 AlienAnnhilator 特定参考? Sam,您不需要执行 update() 调用中的 init() 逻辑。创建一次对象和布局,但不要在每次更新调用时创建事物的实例。您必须记住,update() 每秒调用 60 次,并正确构建您的代码。 【参考方案1】:分析器显示它在您的 gameScene 的更新方法中。请记住,它每秒运行大约 60 次,因此您不想在那里做任何非常重的事情。
【讨论】:
以上是关于SpriteKit 游戏中的高 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit 游戏中的 AVAudioPlayer 和性能问题
如何将SpriteKit中的单个游戏场景添加到普通的单视图Swift应用程序中