使用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
用于批处理节点?
答案 0 :(得分:1)
CCSpriteBatchNode绘制其子项。因此,只绘制添加到其中的子项(必须是CCSprite对象)。由于精灵使用CCSpriteFrame,每个子节点只渲染由精灵帧定义的纹理部分。
CCSpriteFrame对象包含对其使用的纹理的引用。这与CCSpriteBatchNode纹理的纹理相同。换句话说,精灵框架的纹理始终是纹理图集的纹理,而不仅仅是纹理的一部分。这就是CCSpriteFrame中的CGRect所做的,它指示精灵只绘制较大纹理的特定区域。