performance - childNodeWithName在SpriteKit中的表现如何?

标签 performance sprite-kit big-o

在 SpriteKit 中,SKNode 的 childNodeWithName: 方法在接收节点的子节点中搜索具有特定名称的节点。我知道。

但是性能呢?我的意思是,它是如何实现的?

这个问题的可能答案是:

  1. 它的计算复杂度为 O(n),因为它会遍历所有的 child
  2. 它的计算复杂度为 O(log n),因为它确实使用了一些索引结构

我问的原因

如果用for循环实现,那么它的复杂度为O(n)(其中n是当前节点的子节点数)。那么我们应该避免在一些关键点调用它,比如GameScene的update方法。至少在有很多 child 的时候。

最佳答案

在优化我的 iOS 游戏几个小​​时后,我相信 childNodeWithName: 的运行时间是线性的而不是对数的。

我正在处理的情况是: 场景中有 500 个节点,每个节点都有一个唯一的名称(4 个字节的 UUID,我知道这不是最佳做法)。我每 100 毫秒调用一次 childNodeWithName为每个节点从服务器端应用更新。然后,显然我观察到 fps 意外下降,即使没有来自服务器的更新(这意味着只有 childNodeWithName 被调用并立即返回)。

所以我决定替换 childNodeWithName定制 Set<String>只是为了检查 SKNode 是否包含具有特定名称的节点。它奏效了,fps 下降消失了。

关于performance - childNodeWithName在SpriteKit中的表现如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903745/

相关文章:

algorithm - Big O 表示法的预期语法

c++ - 使用随机数生成器的代码的 Big-O 是什么?

javascript - 给出一个原始数组和一个新数组,每个元素的值表示左边更大的元素的数量

performance - 如何加速这个转换函数?

ios - 如何在 SKView 之上添加 SCNView

ios - 边界碰撞检测

ios - 在运行时修改重复任务序列

algorithm - 插入排序运行时复杂度的最佳描述是什么

linux - 如何更好地诊断哪个客户端导致 Xorg CPU 使用率过高?

postgresql 9.6 使用我所有的 ram