Мне любопытно, если кто-нибудь знает, как определить, когда был затронут 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 внуков, поскольку они представляют собой серию спрайтов?
Зависит от того, какой метод вы используете.
Арматура скелетной анимации: Вы используете инструмент скелетной анимации cocostudio для создания анимации? Если вы воспользуетесь этим, вы получите узел с правильной ограничительной рамкой, плотно обертывающий ваш спрайт и корректирующий, когда кости меняют положение
Спрайт лист анимации: Если вы используете спрайт-лист с файлом .plist, вы можете проверить размер, отраженный в файле .plist, и установить для вашего размера batchNode самый большой размер, который вы найдете, или динамически настроить его на основе отображаемого в данный момент спрайта. Я думаю, Cocos делает это по умолчанию.
Загрузка спрайт-фреймов: Если вы загружаете отдельные спрайты с помощью spriteFrames, вы можете проверить contentSize spriteFrame и установить ограничивающий блок вручную.
Я использовал все 3 и всегда смог получить размер boundingBox. Позвольте мне знать, если это помогает. я использовал этот статья, чтобы изучить анимацию спрайт-листа и просто поиграть с кокосовой скелетной анимацией и выяснить это, когда я экспериментировал с ней.
Ну, я понял это, получив BoundingBox внука, который является спрайтом. Тогда я смог сделать все, что хотел, в спрайтбатчноде.