Cocos2d iphone CCSpriteBatchNode:使用单个帧还是整个纹理图集?

Cocos2d iphone CCSpriteBatchNode:使用单个帧还是整个纹理图集?,cocos2d-iphone,Cocos2d Iphone,使用CCSpriteBatchNode的好处是,它的每个子节点都不是由OpenGL单独绘制的,因此,如果屏幕上有许多相同的图像,则使用批处理节点可以提高性能 然而,我很好奇,如果将整个纹理图集加载到CCSpriteBatchNode,会发生什么;这是否意味着,当您在该纹理图集中使用单个精灵帧时,它正在(幕后)绘制纹理中的所有精灵帧 换句话说,这样做在性能上是否有任何区别: [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWi

使用CCSpriteBatchNode的好处是,它的每个子节点都不是由OpenGL单独绘制的,因此,如果屏幕上有许多相同的图像,则使用批处理节点可以提高性能

然而,我很好奇,如果将整个纹理图集加载到CCSpriteBatchNode,会发生什么;这是否意味着,当您在该纹理图集中使用单个精灵帧时,它正在(幕后)绘制纹理中的所有精灵帧

换句话说,这样做在性能上是否有任何区别:

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

 CCSpriteFrame *starFrame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"throwstar.png"];

stars=[CCSpriteBatchNode batchNodeWithTexture:starFrame.texture];

[self addChild:stars];

或者只使用整个纹理图集,而不是批处理节点的
starFrame.texture

CCSpriteBatchNode绘制其子节点。因此,只绘制添加到其中的子对象(必须是CCSprite对象)。由于精灵使用CCSpriteFrame,因此每个子级仅渲染精灵框架定义的纹理部分


CCSpriteFrame对象保存对其使用的纹理的引用。这与CCSpriteBatchNode纹理相同。换句话说,精灵框架的纹理始终是纹理图集的纹理,而不仅仅是纹理图集的一部分。这就是CCSpriteFrame中的CGRect所做的,它指示精灵只绘制较大纹理的特定区域。

当您说batchnode绘制其子对象时,它只“绘制”它们一次,对吗(在一个批处理中,一次GL调用)?但您还提到,每个子对象仅渲染其纹理的一部分。因此,如果多个子对象具有来自同一批处理节点纹理的不同帧,那么每个子对象都将获得自己的渲染调用,因为它是纹理的不同部分?