SpriteBatchNode的触摸检测
Touch detection for 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吗?因为他们是一系列的精灵。
取决于您使用的方法。
-
Armature骨骼动画:你正在使用cocostudio骨骼动画工具来创建你的动画吗?如果你使用这个方法,你将得到一个带有正确边界框的节点,它将紧紧包裹你的精灵,并在骨骼改变位置时进行调整
-
精灵表动画:如果你使用的是带有。plist文件的精灵表,你可以检查。plist文件中反映的大小,并将batchNode大小设置为你找到的最大的一个,或者根据当前显示的精灵动态调整它。我想cocos是默认的。
-
加载精灵帧:如果你正在使用spriteFrames加载单个精灵,你可以检查spriteFrame的contentSize并手动设置你的边界框。
我使用了所有3个并且总是能够得到boundingBox的大小。如果有帮助,请告诉我。我用这篇文章来学习精灵表动画,只是玩了一下cocos的骨骼动画,并在试验中发现了这一点。
我通过孙儿的BoundingBox(游戏邦注:这是一个精灵)找到了答案。然后我就可以对spritebatchnode做任何我想做的事情了。
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 正在LLVM中检测整数比较条件
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 OpenCV C++窗口上的触摸
- 检测我触摸的延长弹簧
- 如何检测到插入/输出Oculus触摸控制器
- 检测触摸 Cocos2d-x
- 正在检测屏幕的触摸属性
- SpriteBatchNode的触摸检测
- 如何检测何时在触摸设备上显示键盘?