В настоящее время я делаю игру, в которой мне нужно проверить столкновение между кругом и прямоугольником, где круг может быть больше прямоугольника, но также и наоборот, и заставить их реагировать. Они также могут находиться в состоянии c или в движении.
Пока у меня есть этот код:
// Check if b1 is a rectangle and b2 a circle
if (!b1.collisionRadius && b2.collisionRadius) {
if (Physics.circleRectangleCollision(b1, b2)) {
b1.collision = b2.uid;
b2.collision = b1.uid;
if(b1.isStatic) {}
else if(b2.isStatic) {}
else {}
// Collision reaction
}
}
// Physics.circleRectangleCollision
circleRectangleCollision(rect, circle) {
var distx = Math.abs(circle.position.x - rect.position.x);
var disty = Math.abs(circle.position.y - rect.position.y);
if (distx > (rect.width / 2 + circle.collisionRadius)) { return false; }
if (disty > (rect.height / 2 + circle.collisionRadius)) { return false; }
if (distx <= (rect.width / 2)) { return true; }
if (disty <= (rect.height / 2)) { return true; }
var hypot = (distx - rect.width / 2) * (distx - rect.width / 2) +
(disty - rect.height / 2) * (disty - rect.height / 2);
return (hypot <= (circle.collisionRadius * circle.collisionRadius));
}
(код) https://glitch.com/edit/#! / Demostanis-worlds-физика -инжин
Что мне для этого сделать?
Спасибо.