Понимание CCBatchNode в Cocos2d
Я слышал, что использование CCBatchNode лучше для выступлений в Cocos2d. У меня проблемы с пониманием, как это работает. У меня есть несколько подклассов CCSprite, которые представляют объекты в моей игре. Пока что я их инициализирую spriteWithFile:
метод.
Теперь у меня есть таблица спрайтов, содержащая все мои спрайты (вместе с файлом plist). Как я должен использовать это, чтобы я мог извлечь выгоду из "единственного вызова ничьей openGL"?
Если я инициализирую свои спрайты, возвращая кадр в CCBatchNode, это будет работать?
В любом случае, я плохо понимаю CCBatchNode, некоторая помощь будет отличной!
С уважением
1 ответ
Вот быстрый пример использования CCSpriteFrameCache и CCSpriteBatchNode.
Сначала настройте общий кэш кадров (представьте, что это отображение имен ваших отдельных изображений и их прямоугольных кадров в объединенном изображении узла пакета):
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist" textureFile:@"spritesheet.png"];
Теперь создайте свой пакетный узел с объединенным именем изображения (этот batchNode выполняет одно рисование для нескольких спрайтов):
CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"spritesheet.png" capacity:20];
Теперь создайте узел спрайта, передавая имя отдельного изображения. Добавьте его в пакетный узел. (Опять же, batchnode будет выполнять вызовы отрисовки, так что именно в этом и заключается выигрыш в производительности):
CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"name_of_your_sprite_in_plist"];
[batchNode addChild:sprite];
Вы можете обрабатывать спрайт так же, как спрайт, который вы ранее создали, непосредственно из одного изображения (но с преимуществами производительности при использовании пакетного узла).