2012-02-03 35 views
0

我目前正试图创建一个无休止的滚动背景,角色上下跳动并收集沿途的物品。 我的问题在于需要创建并移动的项目。CCSpriteBatchNode或NSMutableArray

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

我回顾了Steffen Itterheim关于在初始化时创建子弹然后在需要时使用它们的书中的示例。 我认为这会对iPhone造成低效和征税。另外,即使它们不可见,是不是所有的子弹都不断更新,甚至更多地使用iPhone的有限内存和CPU?另一方面,如果我有一个NSMutableArray,并根据需要添加了项目并更新了当前存在的一些选择项,这是否会更高效。

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

谢谢!

+0

我还没有读过这本书,但作者不太可能会投入一个'低效'的例子。我最好的建议是“让它工作”,然后确定你是否有性能问题。如果是这样,请回到这里,具体讨论一下你的实现问题。没有一些细节,很难给你任何实际的建议:有多少个精灵,他们在滚动时执行什么动作等等)。 – YvesLeBorg 2012-02-03 21:33:15

回答

0

如果您正在使用Cocos,如果您计划同时在屏幕上显示许多对象,则CCSpriteBatchNode会更好。 CCSpriteBatchNode只能“绘制”一次对象,然后在视图中重复传播它。这节省了大量宝贵的CPU资源。这就是为什么CCSpriteBatchNode与子弹一起使用的原因,因为屏幕上通常有很多。另外,如果您的对象频繁出现,即使一次只有一个或两个屏幕,CCSpriteBatchNode将使用缓存的图形而不是重绘,仍可节省CPU资源。

我建议你可以坚持使用Cocos对象,因为它们旨在通过像NSMutableArray这样的本机Apple对象来提高像这样的性能。

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

0

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

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