你对CCSpriteBatchNode的理解是正确的。
CCSpriteBatchNode类似于一个批处理节点:如果它包含子元素,它会在1次OpenGL调用中将它们绘制出来(通常称为“批处理绘制”),如果没有CCSpriteBatchNode(在这种情况下),所有的“批处理绘制”将被调用与子元素(精灵)数量一样多。
CCSpriteBatchNode只能引用一个纹理(一个图像文件、一个纹理集),即由zwoptex创建的精灵表。只有包含在该纹理中的CCSprites才能添加到CCSpriteBatchNode中。添加到CCSpriteBatchNode中的所有CCSprites都在一个OpenGL ES绘制调用中绘制。如果CCSprites未添加到CCSpriteBatchNode,则需要为每个CCSprite进行一个OpenGL ES绘制调用,这样效率就不高。
根据你的情况,由于任何时候只渲染一个纹理,因此不必使用CCSpriteBatchNode。
所以我想知道:我应该逐帧动画精灵表(没有庞大的纹理)吗?或者能否以不同的方式使用那个庞大的纹理?
无论如何你都会加载2048 x 2048的纹理。需要考虑的问题是为什么只有一个2048 x 2048的纹理给你一个二级警告?你加载了多少这样的纹理?另外,2048 x 2048仅受iPod3G/iPhone3GS及以上支持(这很好)。
如果你正在加载许多纹理(我认为是真的),你需要编写一些逻辑来在不需要时卸载纹理。请看以下方法:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName]
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]
[[CCTextureCache sharedTextureCache] removeUnusedTextures]
就动画而言,你可以创建CCAnimation并使用它,或者(根据你的情况)可以使用setDisplayFrame(CCSpriteFrame frame)。