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是为了确保边界判断的准确性。