Подтвердить что ты не робот

Когда использовать CCSpriteBatchNode?

в Cocos2d Я буду играть анимацию. Анимация имеет около 12 кадров, и каждый кадр довольно большой. Фактически, версия -hd каждого кадра довольно велика.

Во всяком случае, во-первых, я создал его, поставив все 12 кадров в текстуре с помощью Zwoptex. Текстура составляет около 2048x2048.

Это значит, что я могу анимировать CCSprite в CCSpriteBatchNode, используя эту текстуру.

Но я, кажется, получаю предупреждение памяти уровня 2.

Теперь, когда я думаю об этом, я не думаю, что CCSpriteBatchNode должен был использоваться для одного спрайта. Я предполагаю, что это было полезно только, если вы хотели нарисовать много спрайтов, которые используют ту же текстуру.

Итак, я хочу знать: должен ли я аниматировать кадр спрайта по кадру (без огромной текстуры)? Или можно использовать эту огромную текстуру, но по-другому?

4b9b3361

Ответ 1

Вы правы в CCSpriteBatchNode. CCSpriteBatchNode похож на пакет node: если он содержит дочерние элементы, он будет рисовать их в одном одиночном вызове OpenGL (часто называемом "пакетный розыгрыш" ), в отсутствие CCSpriteBatchNode (в этом случае) весь "пакетный розыгрыш" будет называемое столько раз, сколько количество детей (спрайтов).

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

В соответствии с вашим сценарием вам не нужно использовать CCSpriteBatchNode, поскольку в любой момент времени отображается только одна текстура.

Итак, я хочу знать: должен ли я аниматировать кадр спрайта по кадру (без огромной текстуры)? Или можно использовать эту огромную текстуру, но по-другому?

Это не имеет значения. В любом случае вы будете загружать текстуру 2048 x 2048. Проблема в том, чтобы подумать, почему только одна текстура 2048 x 2048 дает вам предупреждение уровня 2? сколько таких текстур вы загружаете. BTW 2048 x 2048 поддерживается только на iPod3G/iPhone3GS выше (это нормально).

Если вы загружаете много текстур (что мне кажется правдой). Вам нужно запрограммировать некоторую логику, где вы можете выгрузить текстуру, когда они не нужны. Посмотрите на следующие методы:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];

Что касается анимации, вы можете создать CCAnimation и использовать это или (в зависимости от вашего сценария) вы можете использовать setDisplayFrame (кадр CCSpriteFrame);