Я довольно новичок в 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]
Я довольно новичок в JavaScript, и я пытался создать небольшую игру, чтобы выучить новые концепции. Проблема, с которой я сталкиваюсь, заключается в том, что снаряды в игре часто имеют более высокую скорость, чем ширина объектов, с которыми они должны столкнуться, и поэтому проходить через не сталкиваясь при проверке на столкновение каждые кадры. Мой текущий код берет прямоугольник и круг, а также их x -скорости и получает их относительную скорость. Затем он раздувает область прямоугольника в x и y в 2 раза выше радиуса круга.[code]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)
Я хочу, чтобы NAO схватил мяч, расположенный перед ним в точке отсчета (,0)-(y,é) и положенный на землю, я хочу, чтобы робот схватил его правой рукой (мяч подходит в его руку), для этого я разработал следующий код (используя движение руки на основе...
Я строю игру на основе вокселей и использую компонент движения на основе AABB. Основная функция aabbsweep вызывает мою функцию RaycastBlocks несколько раз в тройном вложенном цикле, чтобы собрать блоки для проверки столкновений. По словам моего...
Я строю игру на основе вокселей и использую компонент движения на основе AABB. Основная функция aabbsweep вызывает мою функцию RaycastBlocks несколько раз в тройном вложенном цикле, чтобы собрать блоки для проверки столкновений. По словам моего...
Я делаю 2D сверху вниз RPG, используя raylib с c ++ . Я нахожусь в том, что создаю систему столкновения для моей игры. Это просто AABBS. Таким образом, я наткнулся на алгоритм AABB (также называемый непрерывным обнаружением столкновений), который...