Схватить столкновение AABB между кругом и прямоугольникомJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Схватить столкновение AABB между кругом и прямоугольником

Сообщение Anonymous »

Я довольно новичок в JavaScript, и я пытался создать небольшую игру, чтобы выучить новые концепции. Проблема, с которой я сталкиваюсь, заключается в том, что снаряды в игре часто имеют более высокую скорость, чем ширина объектов, с которыми они должны столкнуться, и поэтому проходить через не сталкиваясь при проверке на столкновение каждые кадры. Мой текущий код берет прямоугольник и круг, а также их x -скорости и получает их относительную скорость. Затем он раздувает область прямоугольника в x и y в 2 раза выше радиуса круга.

Код: Выделить всё

function sweptAABB(pointx, pointy, velx, vely, deltaTime, rectx, recty, rectw, recth){
//pointx and pointy are the circle's center, velx and vely are the relative velocities

//how far the "point" (this is the circle, but it's a point since we're expanding our rectangle to account for it's radius) will move during the frame:
const movementX = velx*(deltaTime);
const movementY = vely*(deltaTime)

const invMoveX = movementX !== 0 ? 1 / movementX : Infinity;
const invMoveY = movementY !== 0 ? 1 / movementY : Infinity;

//times that the point would enter/exit the rectangle
const tEnterXY = {x: (rectx-pointx)*invMoveX, y:(recty - pointy) * invMoveY}
const tExitXY = {x: (rectx+rectw-pointx)*invMoveX, y:(recty+recth - pointy) * invMoveY};

//the earliest posible enter/exit times
const enterTime = Math.max(Math.min(tEnterXY.x, tExitXY.x), Math.min(tEnterXY.y, tExitXY.y));
const exitTime = Math.min(Math.max(tEnterXY.x, tExitXY.x), Math.max(tEnterXY.y, tExitXY.y));

return enterTime = 0 && enterTime  

Подробнее здесь: [url]https://stackoverflow.com/questions/79650138/swept-aabb-collision-between-circle-and-rectangle[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»