【问题标题】:CCSpriteBatchNode or NSMutableArrayCCSpriteBatchNode 或 NSMutableArray
【发布时间】:2012-02-05 06:27:09
【问题描述】:

我目前正在尝试创建一个无限滚动的背景,其中一个角色会上下跳跃并收集沿途出现的物品。 我的问题在于需要创建然后移动的项目。

我查看了 CCSpriteBatchNode 和 NSMutableArray,但不确定使用哪个。

我回顾了 Steffen Itterheim 书中关于在初始化时创建子弹然后在需要时使用它们的示例。 我认为这对 iPhone 来说是低效的和繁重的。还有,不是所有的子弹即使看不见也不断更新,消耗更多的 iPhone 有限的内存和 CPU?

另一方面,如果我有一个 NSMutableArray 并根据需要添加项目并更新当前存在的一些选择性,这会更有效吗?

因此,我的主要问题是在 NSMutableArray 或 CCSpriteBatchNode 之间进行选择,并找出在创建大量、持续更新的对象方面哪个最有效。

谢谢!

【问题讨论】:

  • 我没有读过这本书,但作者不太可能创造一个“低效”的例子。我最好的建议是“让它工作”,然后确定你是否有性能问题。如果你这样做了,请回到这里,带着一个有针对性的问题来详细说明你的实施。如果没有一些细节,很难给你任何实用的建议:有多少精灵,它们在滚动时执行了什么动作,等等......)。

标签: ios cocos2d-iphone


【解决方案1】:

如果您使用的是 Cocos,如果您打算同时在屏幕上显示许多对象,CCSpriteBatchNode 会好得多。 CCSpriteBatchNode 只“绘制”一次对象,然后在您的视图中重复传播它。这节省了大量宝贵的CPU资源。这就是 CCSpriteBatchNode 与项目符号一起使用的原因,因为屏幕上通常有很多。

另外,如果你的对象经常出现,即使屏幕上一次只有一两个,CCSpriteBatchNode 将使用缓存的绘图而不是重绘,仍然可以节省 CPU 资源。

我建议您尽可能坚持使用 Cocos 对象,因为出于此类原因,它们旨在提高性能,而不是像 NSMutableArray 这样的原生 Apple 对象。

但是,如果你坚持使用 NSMutableArray,如果你使用的是 Cocos,仍然可以考虑使用 CCArray。但 CCSpriteBatchNode 可能是你最好的选择。

【讨论】:

    【解决方案2】:

    完全在屏幕之外的节点会很快被关闭,如果您将节点的可见属性设置为 NO,它将立即被关闭,这意味着不可见节点基本上没有性能损失。

    缓存许多对象实际上比在运行时创建和释放它们要快,即使这意味着内存中总是有 400 个左右的对象。这最多需要 200 KB 的内存,并避免频繁的分配/释放循环,您希望尽可能避免这种循环,尤其是在第 1 代/第 2 代设备上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2016-03-08
      • 2012-03-07
      • 2012-10-28
      • 1970-01-01
      相关资源
      最近更新 更多