SpriteBatchNode的触摸检测

时间:2015-10-07 17:44:35

标签: c++ xcode cocos2d-x bounding-box spritebatch

我很好奇是否有人知道如何检测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,因为它们是一系列的精灵吗?

2 个答案:

答案 0 :(得分:0)

取决于您使用的方法。

  1. 电枢骨骼动画:您是否正在使用cocostudio骨架动画工具来制作动画?如果您使用它,您将得到一个节点,其中正确的边界框紧紧包裹您的精灵并调整骨骼何时改变位置

  2. 精灵表动画:如果您使用带有.plist文件的精灵表,您可以检查.plist文件中反映的大小,并将您的batchNode大小设置为最大的根据当前显示的精灵查找或动态调整它。我认为cocos默认会这样做。

  3. 加载精灵框架:如果使用spriteFrames加载单个精灵,可以检查spriteFrame的contentSize并手动设置边界框。

  4. 我已经使用了全部3并且始终能够获得boundingBox大小。如果这有帮助,请告诉我。我使用this文章来学习精灵表动画,并且只是玩了一下cocos骨骼动画,并在我试验它时想出来。

答案 1 :(得分:0)

好吧,我通过获取孙子的BoundingBox来解决这个问题,这是一个精灵。然后我能够为spritebatchnode做任何我想做的事。