Cocos2D: инициализация CCSpriteBatchNode - PullRequest
0 голосов
/ 22 февраля 2012

Мой вопрос связан с тем, как работает использование 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?
}

Спасибо!

1 Ответ

4 голосов
/ 22 февраля 2012

Это для оптимизации.в основном, когда вы добавляете CCSprite к слою, требуется вызов OpenGL для рисования элемента (на самом деле их 7, я думаю), поэтому, если у вас 100 спрайтов, выполняется 100 вызовов.Если вы добавляете их в BatchNode, для рисования всех их детей требуется всего один вызов.

Проверьте документы:

CCSpriteBatchNode похож на пакетный узел: если он содержит дочерние элементы, онбудет рисовать их за 1 единственный вызов OpenGL (часто называемый «пакетной прорисовкой»).

CCSpriteBatchNode может ссылаться на одну и только одну текстуру (один файл изображения, один атлас текстуры).Только CCSprites, которые содержатся в этой текстуре, могут быть добавлены в CCSpriteBatchNode.Все CCSprites, добавленные в CCSpriteBatchNode, отрисовываются в одном вызове отрисовки OpenGL ES.Если CCSprites не добавляются в CCSpriteBatchNode, то для каждого из них потребуется вызов отрисовки OpenGL ES, что является менее эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...