2012-02-22 56 views
0

我的问题是有关使用CCSpriteBatchNode的是如何工作的...当你与一个文件初始化CCSpriteBatchNode,让我们说:的Cocos2D: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? 
} 

谢谢!

回答

4

这是为了优化。基本上当你添加一个CCSprite到一个图层涉及到一个OpenGL调用来绘制这个项目(实际上他们是7我认为),所以如果你有100个精灵,100个调用完成。如果将它们添加到BatchNode中,只需一次调用即可绘制其所有子项。

检查文档:

CCSpriteBatchNode就像一个批次节点:如果它包含的孩子,它会 吸引他们在1次单一的OpenGL调用(通常被称为“批抽奖”)。

CCSpriteBatchNode可以引用一个且只有一个纹理(一个图像 文件,一个纹理图集)。只有包含在 中的CCSprites可以将该纹理添加到CCSpriteBatchNode中。添加到CCSpriteBatchNode的所有CCSprites 都在一个OpenGL ES绘图调用中绘制。如果 CCSprites未添加到CCSpriteBatchNode,则每个都需要一个OpenGL ES绘图调用,效率较低。

+0

谢谢!现在我明白了!我很困惑:P – Axort 2012-02-22 18:51:53