Cocos2d-x常见碰撞测试有哪些

2015年02月16日 10:34 0 点赞 0 评论 更新于 2025-11-21 16:21

在游戏开发中,矩形碰撞检测是非常常见的一种碰撞检测方式。下面为你详细介绍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;
}

CCRectGetMinXCCRectGetMinY 分别用于获取矩形左下角顶点的x坐标和y坐标;CCRectGetMaxXCCRectGetMaxY 分别用于获取矩形右上角顶点的x坐标和y坐标,这里减去1是为了确保边界判断的准确性。

作者信息

boke

boke

共发布了 3994 篇文章