【问题标题】:slow framerate on ios8 with spritekit带有spritekit的ios8上的慢帧率
【发布时间】:2014-09-16 10:55:15
【问题描述】:

嗨,我在 ios7 中创建了一个游戏。它在 60 英寸的恒定帧速率下工作正常 ios7.1 . 两天前我将我的 Xcode 从 5.1 更新到 Xcode gm seed6 现在当我用 iOS8 再次编译我的游戏时会出现许多错误

比如

1) 帧率从 60 急剧下降到 45

精灵的 2 zposition 不能正常工作

3) CGpath 内存泄漏

4) 一次又一次编译游戏时发生几次崩溃

xcode6 gm 种子是否包含错误或者我必须自己修复这些错误

是否有人面临同样的问题

【问题讨论】:

  • 经典模拟器性能下降?
  • 所有测试都在设备上进行
  • 有人找到解决这个问题的方法吗?
  • 我终于找到了我所有问题的解决方案

标签: ios7 sprite-kit ios8


【解决方案1】:

我终于找到了一些解决方案,为什么与 ios7 相比,ios8 中的游戏表现缓慢

1)[self enumerateChildNodesWithName: usingBlock:^(SKNode *node, BOOL *stop) { //你的代码 }] ios8 中的套管问题,在与苹果人交谈后,在 ios8 中表现缓慢,他们告诉我 enumerateChildNodesWithName 已更改为 ios8,因为许多开发人员在枚举时尝试更改或修改节点,这可能导致他们的游戏崩溃,所以现在由于空指针在 ios8 中检查 enumerateChildNodesWithName 很慢,这意味着如果 enumerateChildNodesWithName 找到任何空值,它将导致 c 崩溃。

2) 对于视差或物体的移动,您应该使用 [[self children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { //你的代码 }] 这比 enumerateChildNodesWithName 花费的时间几乎少了 4 倍(至少在我的情况下)

3) 在处理物理时,我发现制作两个动态物体会导致我的游戏变慢,因此更好的解决方案是使用静态物理物体并在更新函数或 skaction 中移动或处理它们。

4) 将所有纹理预加载并保存为单例并将它们从高到低加载消耗更少的内存,同时将纹理保存为单例对象保持 60 帧率

5) 我在游戏中忘记的一件事是,没有为每个 skaction 使用名称,所以最好为每个 skaction 命名,这将帮助我手动删除操作并在多个节点上应用相同的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多