Обнаружение касания для SpriteBatchNode

Мне любопытно, если кто-нибудь знает, как определить, когда был затронут SpriteBatchNode, поскольку его BoundingBox всегда равен нулю. Вот как я обнаруживаю прикосновение для отдельных спрайтов

Node *parentNode = event->getCurrentTarget();
Vector<Node *> children = parentNode->getChildren();
Point touchPosition = parentNode->convertTouchToNodeSpace(touch);

for (auto iter = children.rbegin(); iter != children.rend(); ++iter) {
childObject = *iter;

if (childObject->getBoundingBox().containsPoint(touchPosition)){

//do something
}

Но в большинстве случаев я хочу, чтобы мои спрайты были анимированы, следовательно, используя SpriteBatchNode. Есть идеи? Могу ли я получить BoundingBox внуков, поскольку они представляют собой серию спрайтов?

0

Решение

Зависит от того, какой метод вы используете.

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

  2. Спрайт лист анимации: Если вы используете спрайт-лист с файлом .plist, вы можете проверить размер, отраженный в файле .plist, и установить для вашего размера batchNode самый большой размер, который вы найдете, или динамически настроить его на основе отображаемого в данный момент спрайта. Я думаю, Cocos делает это по умолчанию.

  3. Загрузка спрайт-фреймов: Если вы загружаете отдельные спрайты с помощью spriteFrames, вы можете проверить contentSize spriteFrame и установить ограничивающий блок вручную.

Я использовал все 3 и всегда смог получить размер boundingBox. Позвольте мне знать, если это помогает. я использовал этот статья, чтобы изучить анимацию спрайт-листа и просто поиграть с кокосовой скелетной анимацией и выяснить это, когда я экспериментировал с ней.

0

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

Ну, я понял это, получив BoundingBox внука, который является спрайтом. Тогда я смог сделать все, что хотел, в спрайтбатчноде.

0

По вопросам рекламы [email protected]