最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
Cocos2d-x常见碰撞测试有哪些
在游戏开发中,矩形碰撞检测是非常常见的一种碰撞检测方式。下面为你详细介绍Cocos2d-x中的矩形碰撞检测算法。
矩形碰撞检测核心函数
以下是Cocos2d-x中用于判断两个矩形是否相交的核心函数:
bool CCRect::CCRectIntersectsRect(const CCRect& rectA, const CCRect& rectB)
{
return !(CCRectGetMaxX(rectA) < CCRectGetMinX(rectB) ||
CCRectGetMaxX(rectB) < CCRectGetMinX(rectA) ||
CCRectGetMaxY(rectA) < CCRectGetMinY(rectB) ||
CCRectGetMaxY(rectB) < CCRectGetMinY(rectA));
}
该函数的逻辑是:如果两个矩形不相交,那么必然存在一个矩形在另一个矩形的左侧、右侧、上方或者下方。通过对这些情况取反,就可以判断两个矩形是否相交。
边界值获取函数
在上述实现函数中,获取矩形边界值的函数至关重要,特别是求最大值时减1的操作,如果遗漏会导致碰撞检测出现错误判断。以下是这些获取边界值的函数:
CGFloat CCRect::CCRectGetMinX(const CCRect& rect)
{
return rect.origin.x;
}
CGFloat CCRect::CCRectGetMaxX(const CCRect& rect)
{
return rect.origin.x + rect.size.width - 1;
}
CGFloat CCRect::CCRectGetMinY(const CCRect& rect)
{
return rect.origin.y;
}
CGFloat CCRect::CCRectGetMaxY(const CCRect& rect)
{
return rect.origin.y + rect.size.height - 1;
}
CCRectGetMinX 和 CCRectGetMinY 分别用于获取矩形左下角顶点的x坐标和y坐标;CCRectGetMaxX 和 CCRectGetMaxY 分别用于获取矩形右上角顶点的x坐标和y坐标,这里减去1是为了确保边界判断的准确性。