我目前正在尝试创建一个无休止的滚动背景,其中有一个角色,他跳上跳下,收集沿途的物品。我的问题出在需要创建然后移动的项目上。
我看过CCSpriteBatchNode和NSMutableArray,但我不确定该使用哪一个。
我回顾了Steffen Itterheim的书中关于在初始化时创建项目符号并在需要时使用它们的示例。我认为这将是低效和繁重的iPhone。此外,难道所有的项目都在不断更新,即使看不见,也会消耗更多iPhone有限的内存和CPU?
另一方面,如果我有一个NSMutableArray,并根据需要添加项目,并有选择地更新当前存在的几个项目,这是否会更有效率。
因此,我的主要问题是在NSMutableArray和CCSpriteBatchNode之间进行选择,并找出在创建大量不断更新的对象时哪个最有效。
谢谢!
发布于 2012-02-04 16:50:49
如果您使用的是Cocos,如果您计划将多个对象同时显示在屏幕上,则CCSpriteBatchNode会更好。CCSpriteBatchNode只“绘制”一次对象,然后在视图中重复显示它。这节省了大量宝贵的CPU资源。这就是为什么CCSpriteBatchNode和项目符号一起使用,因为通常屏幕上有很多项目符号。
此外,如果您的对象经常出现,即使屏幕上一次只有一两个对象,CCSpriteBatchNode也会使用缓存的图形而不是重绘,仍然可以节省CPU资源。
我建议在可能的情况下继续使用Cocos对象,因为它们的设计是为了提高性能,而不是像NSMutableArray这样的原生苹果对象。
但是,如果您坚持使用NSMutableArray,那么如果您使用的是Cocos,那么仍然可以考虑使用CCArray。但是CCSpriteBatchNode可能会是你最好的选择。
发布于 2012-02-05 06:27:09
完全在屏幕之外的节点很快就会被清除,如果您将节点的visible属性设置为NO,它将立即被清除,这意味着不可见节点基本上不会有性能损失。
缓存许多对象实际上比在运行时创建和释放它们更快,即使这意味着内存中总是有400个左右的对象。这最多需要200KB的内存,并避免频繁的分配/取消分配周期,这是您希望尽可能避免的,特别是在第一代/第二代设备上。
https://stackoverflow.com/questions/9135471
复制相似问题