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

时间:2012-02-19 12:02:04

标签: cocos2d-iphone

使用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用于批处理节点?

1 个答案:

答案 0 :(得分:1)

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

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