CCSpriteBatchNode或NSMutableArray

时间:2012-02-03 21:05:32

标签: ios cocos2d-iphone

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

我看过CCSpriteBatchNode和NSMutableArray,但我不确定要使用哪个。

我从他的书中回顾了Steffen Itterheim的例子,该书在初始化时创建子弹,然后在需要时使用它们。 我认为这对iPhone来说效率低下并且很费力。此外,即使它们不可见,并不是所有的子弹都不断更新,消耗掉更多iPhone的有限内存和CPU?

另一方面,如果我有一个NSMutableArray并在我需要的时候添加了这些项目并更新了当前存在的少数选项,那么这会更有效。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您正在使用Cocos,如果您计划在屏幕上同时拥有许多对象,则CCSpriteBatchNode要好得多。仅限CCSpriteBatchNode"绘制"对象一次,然后在你的视图中反复传播它。这节省了大量宝贵的CPU资源。这就是CCSpriteBatchNode与子弹一起使用的原因,因为屏幕上通常有很多。

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

我建议尽可能坚持使用Cocos对象,因为它们旨在通过NSMutableArray等本机Apple对象来提高性能。

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

答案 1 :(得分:0)

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

缓存许多对象实际上比在运行时创建和释放它们更快,即使这意味着你在内存中总是有400个左右。这最多需要200 KB的内存,并且避免频繁的分配/释放周期,这是你想要尽可能避免的,特别是在第一代/第二代设备上。