Cocos2d与UIKit视图的整合与应用
1. Cocos2d节点的碰撞检测
在Cocos2d中,碰撞检测是一个重要的功能。以下是一段用于检测节点碰撞的代码:
// check the node itself
hit = CGRectContainsPoint(node.boundingBox, point);
// abort search on first hit
if (hit)
{
break;
}
在这个循环中,前半部分通过递归调用当前节点的子节点,深入遍历Cocos2d节点层次结构。如果任何递归调用找到了碰撞点,循环会立即终止。后半部分则对当前迭代的节点进行实际检查。首先确保不测试 CCScene 或 CCLayer 类节点,因为它们的边界框通常设置为整个屏幕区域,测试这些类会导致总是“命中”,这正是要避免的情况。
实际的检查非常简单,只需测试点是否在边界框内:
hit = CGRectContainsPoint(node.boundingBox, point);
如果有碰撞,循环终止,方法返回。这是一种优化,因为只需要找到对碰撞测试有积极响应的任何节点。
然而,这种解决方案有一些缺点:
- 假设只要触摸在节点的边界框内,节点就应该接收触摸事件,但它不知道是否存在某种游戏状态会阻止节点处理触摸,例如节点是当前禁用的 CCMenuItem 。
超级会员免费看
订阅专栏 解锁全文
42

被折叠的 条评论
为什么被折叠?



