感谢老G的《坑爹的矩形碰撞》,他的提醒非常给力。 在游戏开发中,碰撞检测的矩形碰撞十分的常见。以下是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; }