объяснение чертежа cocos2d-x 3

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

auto spritebatch = SpriteBatchNode::create("ingame.png");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ingame.plist");

И теперь мне нужно создать Sprite, я должен сделать это:

auto backgroundSprite = Sprite::createWithSpriteFrameName("back_gradient.png");
spritebatch->addChild(backgroundSprite);

Но я не понимаю следующих вещей:

  1. Что если в моей игре есть несколько спрайт-листов. Например, у меня есть спрайт-лист HUD и спрайт-лист в игре. Теперь, если я хочу показать игровой экран с HUD, то мне нужно создать 2 SpriteBatchNode? и добавить их в игровой слой?
  2. Что делать, если одну и ту же таблицу спрайтов следует использовать в разных сценах? Должен ли я сделать следующее снова?

    auto spritebatch = SpriteBatchNode :: create («ingame.png»);
    SpriteFrameCache :: деЫпзЬапс () -> addSpriteFramesWithFile ( «ingame.plist»);

  3. Что делать, если я использую спрайты с Button, TextEdit, Label и другие элементы пользовательского интерфейса.

    • Прежде всего, можно ли инициализировать изображения состояний кнопок из таблицы спрайтов?
    • Как я знаю, я не могу добавить элемент пользовательского интерфейса в качестве дочернего SpriteBatchNode, В этом случае, как объединить элементы интерфейса и спрайт в одном представлении / сцене?

Извините за множество вопросов. Но дело в том, что я не смог найти ни одного ресурса, который бы содержал пояснения к этим вопросам. Пока они все связаны. Если вы не знаете ответы на эти вопросы, вы не знаете, как использовать SpriteBatchNode,

1

Решение

Не используйте CCSpriteBatchNode в cocos2d-x v3. Пакетирование выполняется автоматически, и его лучше оставить рендереру для оптимизации вызовов отрисовки с помощью пакетного рисования. Так сказано прямо в статье, которую вы связали:

Граф Render был отделен от графа Scene. Это означает, что автоматическое пакетирование, наконец, поддерживается 🙂 И новый рендерер настолько быстр, что мы больше не поощряем использование SpriteBatchNode.

0

Другие решения

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

Нарек, ты прав.
Во время рендеринга геометрия будет отсортирована, чтобы уменьшить количество вызовов GL. Но не ожидайте, что это рассортирует детей разных родителей в одну строку. Пример: у вас есть

Узел с детьми аб а также переменный ток

Узел В с детьми бод а также быть.

если b и d используют текстуры одного и того же атласа, это не гарантирует, что вы получите какое-либо повышение производительности при использовании атласов вообще.

Но я могу подтвердить, в настоящее время это действительно быстро, и в моем случае вызовы GL вовсе не являются узким местом 🙂

0