Попытка получить два шара, чтобы столкнуться и отскочить назад под соответствующими углами. Когда шары сталкиваются, однако они застревают вместе, и я понятия не имею, что я здесь делаю неправильно.2D простой вектор столкновения шара
Я звоню эту checkCollision()
функцию в моей одушевленной функции Очевидно cx
является ball1 xpos
, cx2
является ball2 xpos
. То же самое для cy
.
function checkCollision() {
var dx = cx2 - cx; // distance between x
var dy = cy2 - cy; // distance between y
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < (radius1 + radius2)) {
// Collision detected. Find the normal.
var normalX = dx/distance;
var normalY = dy/distance;
//find the middle point of the distance
var midpointX = (cx + cx2)/2;
var midpointY = (cy + cy2)/2;
//bounce back
cx = midpointX - radius1*normalX;
cy = midpointY - radius1*normalY;
cx2 = midpointX - radius2*normalX;
cy2 = midpointY - radius2*normalY;
var dVector = (vx - vx2) * normalX;
dVector += (vy - vy2) * normalY;
var dvx = dVector * normalX;
var dvy = dVector * normalY;
vx -= dvx;
vy -= dvy;
vx2 += dvx;
vy2 += dvy;
}
...
Я никогда не делал много работы. Есть ли более простой способ сделать это? Как бы я написал это с помощью углов?
Почему вы вычитаете скорость нормального вектора из текущей скорости? Разве вы не должны просто установить скорость, равную скорости нормального вектора? Подобно этому 'vx = dvx; vy = dvy; ' – mpallansch
Возможно, ваши шары застряли в бесконечном столкновении (ничего себе, это звучало странно). – Niddro
ну честно @mpadittech Я не на 100%, мой друг помог мне написать, что это не моя сильная сторона, я пробовал свой путь, и шары застряли на столкновении, хотя. – joshuaaron