首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocos2D: CCSpriteBatchNode初始化

Cocos2D: CCSpriteBatchNode初始化
EN

Stack Overflow用户
提问于 2012-02-22 17:41:59
回答 1查看 2.4K关注 0票数 0

我的问题是关于如何使用CCSpriteBatchNode .当您用文件初始化CCSpriteBatchNode时,让我们假设:

代码语言:javascript
复制
CCSpriteBatchNode *spriteBatch;
spriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"file.pvr.ccz"];
[self addChild:spriteBatch];

然后,我怀疑.如果要在调用batchNodeWithFile时加载每个sprite,为什么需要将它们添加到CCSpriteBatchNode中?

下面是添加每个sprite的代码:

代码语言:javascript
复制
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?
}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-22 18:18:51

这是为了优化。基本上,当您将一个CCSprite添加到一个层时,需要一个OpenGL调用来绘制项目(事实上,我认为它们是7),所以如果您有100个精灵,那么就完成100个调用。如果将它们添加到BatchNode中,则只需调用一个调用即可绘制所有的子调用。

检查文档:

CCSpriteBatchNode就像一个批处理节点:如果它包含子节点,它将在一个OpenGL调用(通常称为“批绘制”)中绘制它们。

CCSpriteBatchNode只能引用一个纹理(一个图像文件,一个纹理地图集)。只有包含在该纹理中的CCSprites才能添加到CCSpriteBatchNode中。添加到CCSprites中的所有CCSpriteBatchNode都是在一个OpenGL ES抽签调用中绘制的。如果没有将CCSprites添加到CCSpriteBatchNode中,那么每个调用都需要一个OpenGL ES抽签调用,效率较低。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9400090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档