瀏覽代碼

Reviewed function: CheckCollisionCircleRec()

pull/69/head
raysan5 9 年之前
父節點
當前提交
3b45336929
共有 1 個檔案被更改,包括 13 行新增5 行删除
  1. +13
    -5
      src/shapes.c

+ 13
- 5
src/shapes.c 查看文件

@ -391,16 +391,24 @@ bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, floa
}
// Check collision between circle and rectangle
// NOTE: Reviewed version to take into account corner limit case
bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec)
{
bool collision = false;
int recCenterX = rec.x + rec.width/2;
int recCenterY = rec.y + rec.height/2;
float dx = abs(center.x - recCenterX);
float dy = abs(center.y - recCenterY);
float dx = fabs((rec.x + rec.width/2) - center.x);
float dy = fabs((rec.y + rec.height/2) - center.y);
">if (dx > (rec.width/2 + radius)) { return false; }
">if (dy > (rec.height/2 + radius)) { return false; }
if ((dx <= (rec.width/2 + radius)) && (dy <= (rec.height/2 + radius))) collision = true;
if (dx <= (rec.width/2)) { return true; }
if (dy <= (rec.height/2)) { return true; }
return collision;
float cornerDistanceSq = pow(dx - rec.width/2, 2) + pow(dy - rec.height/2, 2);
return (cornerDistanceSq <= (radius*radius));
}
// Get collision rectangle for two rectangles collision

Loading…
取消
儲存