我的问题与CCSpriteBatchNode的使用方式有关...当你用文件初始化CCSpriteBatchNode时,让我们说:
CCSpriteBatchNode *spriteBatch;
spriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"file.pvr.ccz"];
[self addChild:spriteBatch];
然后,这是我的怀疑...为什么你需要将你将使用的每个精灵添加到CCSpriteBatchNode,如果这些精灵应该在你调用 batchNodeWithFile 时被加载?
以下是添加每个精灵的代码:
NSArray *images = [NSArray arrayWithObjects:@"sprite1.jpg", @"sprite2.jpg", @"sprite3.jpg", @"sprite4.jpg", @"sprite5.jpg", @"sprite6.jpg", nil];
for(int i = 0; i < images.count; ++i) {
NSString *image = [images objectAtIndex:i];
float offsetFraction = ((float)(i+1))/(images.count+1);
CGPoint spriteOffset = ccp(winSize.width*offsetFraction, winSize.height/2);
CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:image];
sprite.position = spriteOffset;
[spriteBatch addChild:sprite]; //Here is what I mean... Why to do this? Isn't that supposed that they are already loaded in the CCSpriteBatchNode?
}
谢谢!
答案 0 :(得分:4)
这是为了优化。基本上当你向一个图层添加一个CCSprite涉及一个OpenGL调用来绘制项目时(实际上它们是7我认为),所以如果你有100个精灵,就会完成100个调用。如果将它们添加到BatchNode,则只需一次调用即可绘制所有子项。
检查文档:
CCSpriteBatchNode就像一个批处理节点:如果它包含子节点,它就是 将在一个单一的OpenGL调用中绘制它们(通常称为“批量绘制”)。
CCSpriteBatchNode可以引用一个且仅一个纹理(一个图像 文件,一个纹理图集)。只有包含在其中的CCSprites 该纹理可以添加到CCSpriteBatchNode。所有CCSprites 添加到CCSpriteBatchNode是在一个OpenGL ES绘制调用中绘制的。如果 CCSprites不会添加到CCSpriteBatchNode,而是添加到OpenGL ES 每个人都需要进行抽奖,效率较低。