Cocos2d移动节点不稳定

时间:2012-04-07 03:19:08

标签: objective-c ios cocos2d-iphone

在我即将推出的iPhone游戏中,不同的场景元素被分成了自己的CCNode。

My Obstacle节点包含许多节点,每个节点代表一个障碍物。在每个障碍物节点内部是构成障碍物的图像(1-4个图像),并且一次只有约10个障碍物。每次更新我的游戏都会调用障碍节点中的更新功能,该节点将每个障碍物移动到左侧。但这会让我的游戏减慢很多。

与此同时,我有一个只包含图像的粒子节点,并且每个帧都以与Obstacle节点完全相同的方式移动它们,但它对性能没有明显的影响。但它一次有数百张图片。

我的问题是,为什么障碍物减缓了这么多但是粒子没有?我甚至尝试将障碍物中使用的图像替换为粒子中的图像,并且没有(明显的)差异。是否存在另一级子节点?

2 个答案:

答案 0 :(得分:2)

如果您将所有图像放在纹理图集中并使用CCSpriteBatchNode类批量渲染它们,您将显着提高应用程序的性能,运行速度,帧速率等等。如果你在屏幕上移动很多物体,这会使硬件的工作量减少很多。

使用这个课很容易。使用包含所有图像的纹理图集创建类,然后将此类作为子图层添加到图层中,就像使用sprite一样。

但是,在创建精灵时,将它们作为子项添加到此批处理节点,而不是作为子图层添加到该图层。

这很容易,可能会帮到你很多。

答案 1 :(得分:1)

从我记得的Cocos2d文档来看,粒子非常轻巧,所以你可以在屏幕上同时拥有很多很多粒子。节点较重,需要在帧之间进行更多处理,因为它们与物理系统交互并需要特定于节点的渲染。我最后一次查看渲染循环代码时,它基本上是基于场景中CCnode数量的O(n)。使用NSTimers与Cocos内置的运行循环也会在性能上产生很大的差异。

你能提供一个减速很多的例子吗?究竟如何更新这些障碍?

cocos2d文档有一些best practices,所有这些都以某种方式触及性能。您可以做很多事情来优化每秒帧数。

通常,当您的代码很慢时,使用Instruments.app来确定您的代码花费了多少时间是有帮助的。由于您使用的是框架,因此您将不再有用,因为您最终会找到代码花费大量时间的函数,然后找出如何通过框架的最佳实践或其他优化来减少这些函数。有一些关于提高性能的好博文,我发现this one非常有帮助。