我很好奇是否有人知道如何检测SpriteBatchNode何时被触摸,因为它的BoundingBox始终为null。这就是我检测单个精灵的触摸的方法。
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 :(得分:0)
取决于您使用的方法。
电枢骨骼动画:您是否正在使用cocostudio骨架动画工具来制作动画?如果您使用它,您将得到一个节点,其中正确的边界框紧紧包裹您的精灵并调整骨骼何时改变位置
精灵表动画:如果您使用带有.plist文件的精灵表,您可以检查.plist文件中反映的大小,并将您的batchNode大小设置为最大的根据当前显示的精灵查找或动态调整它。我认为cocos默认会这样做。
加载精灵框架:如果使用spriteFrames加载单个精灵,可以检查spriteFrame的contentSize并手动设置边界框。
我已经使用了全部3并且始终能够获得boundingBox大小。如果这有帮助,请告诉我。我使用this文章来学习精灵表动画,并且只是玩了一下cocos骨骼动画,并在我试验它时想出来。
答案 1 :(得分:0)
好吧,我通过获取孙子的BoundingBox来解决这个问题,这是一个精灵。然后我能够为spritebatchnode做任何我想做的事。