CCSpriteBatchNode的作用

时间:2012-01-31 07:39:16

标签: cocos2d-iphone

CCSpriteBatchNode背后的想法是为许多精灵渲染一次纹理,这样可以提高性能,而不是将每个精灵都视为不同的纹理。

然而,我很困惑如何使用它而不是仅使用 单个纹理图集。如果使用以下方法创建纹理:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameTexture.plist"];

然后使用frame方法拉出用于精灵的每个图像,然后使用相同的单个渲染纹理并不是所有图像,即使从未引入批处理节点?

当然,你可以使用一个结合纹理图谱的蝙蝠侠,但这是如何实际的性能提升?如果你不使用batchnode,它是否会多次渲染纹理,即使它被缓存了?

2 个答案:

答案 0 :(得分:1)

使用相同的纹理,你不会在每次调用时改变纹理,但你仍然在不同的glBegin和Ends渲染所有的sprite,使用CCSpriteBatchNode将确保其中的每个sprite都在同一个调用中呈现

答案 1 :(得分:1)

简单的性能改进来自于减少的OpenGL调用次数。如果你不使用SpriteBatchNode,你的精灵将来自一个纹理是,但它们都将进行单独的OpenGL调用。批处理节点对象包含用于收集所有子节点并仅进行一次调用的代码,这就是为什么您的精灵必须是同一批节点的子节点以获得性能提升的原因。

0个批处理节点+ 100个精灵= 100个OpenGL调用。

1个批处理节点+ 100个精灵(此批处理节点的子节点)= 1个OpenGL调用。

如果你真的有兴趣看看CCSpriteBatchNode.m