2012-02-19 68 views
3

使用CCSpriteBatchNode的好处是每个子项都不是由OpenGL单独绘制的,因此如果屏幕上有许多相同的图像,它将提高使用批处理节点的性能。CCSpriteBatchNode:使用单个框架还是整个纹理图集?

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

换句话说,有没有这样做之间在性能上有什么区别:

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

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

stars=[CCSpriteBatchNode batchNodeWithTexture:starFrame.texture]; 

[self addChild:stars]; 

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

回答

1

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

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

+0

当你说batchnode绘制它的孩子时,它只能“画”它们所有的一次,正确(在一批,一个GL呼叫)?但是你也提到每个孩子只会呈现其纹理的一部分。因此,如果多个孩子从同一个批次节点纹理中获得不同的帧,那么每个孩子都会得到自己的渲染调用,因为它是纹理的不同部分? – johnbakers 2012-02-20 01:26:37

相关问题