SpriteBatchNode的触摸检测

Touch detection for SpriteBatchNode

本文关键字:检测 触摸 SpriteBatchNode      更新时间:2023-10-16

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

取决于您使用的方法。

  1. Armature骨骼动画:你正在使用cocostudio骨骼动画工具来创建你的动画吗?如果你使用这个方法,你将得到一个带有正确边界框的节点,它将紧紧包裹你的精灵,并在骨骼改变位置时进行调整

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

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

我使用了所有3个并且总是能够得到boundingBox的大小。如果有帮助,请告诉我。我用这篇文章来学习精灵表动画,只是玩了一下cocos的骨骼动画,并在试验中发现了这一点。

我通过孙儿的BoundingBox(游戏邦注:这是一个精灵)找到了答案。然后我就可以对spritebatchnode做任何我想做的事情了。