2012-02-22 3 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. Все CCSprites , добавленные в CCSpriteBatchNode, отображаются в одном вызове рисования OpenGL ES. Если CCSprites не добавлены в CCSpriteBatchNode, тогда для каждого из них потребуется использовать вызов OpenGL ES , что менее эффективно.

+0

Спасибо! Теперь я понимаю! Я был в замешательстве: P – Axort

Смежные вопросы