Обнаружение и реагирование на 2D-столкновения прямоугольника, которое работает с угламиJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Обнаружение и реагирование на 2D-столкновения прямоугольника, которое работает с углами

Сообщение Anonymous »

Я делаю 2D-игру, и у меня много проблем с 2D-столкновениями. У меня есть код, который работает нормально, за исключением углов. Однако когда объект сталкивается точно с углом, он просто движется прямо.
Я пытался это исправить буквально 3 недели. Я пробовал искусственный интеллект, пробовал документацию, учебные пособия (именно там я получил код, который у меня сейчас есть), но, похоже, ничего не работает и для углов.
Вот мой текущий код :

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

for (let i = 0; i < entityHitboxLength; i += 8) {
let entityX = entityHitboxes[i];
let entityY = entityHitboxes[i + 1];
let entityXW = entityHitboxes[i + 2];
let entityYH = entityHitboxes[i + 3];
let prevEntityX = entityHitboxes[i + 4];
let prevEntityY = entityHitboxes[i + 5];
let prevEntityXW = entityHitboxes[i + 6];
let prevEntityYH = entityHitboxes[i + 7];

if (
selfYH > entityY &&
selfY < entityYH &&
selfX < entityXW &&
selfXW > entityX
) {
if (selfYH >= entityY && prevSelfYH < prevEntityY) {
selfYH = entityY - 1;
selfY = entityY - 1 - height;
} else if (selfY  prevEntityYH) {
selfY = entityYH + 1;
selfYH = entityYH + 1 + height;
}
else if (selfXW >= entityX && prevSelfXW < prevEntityX) {
selfXW = entityX - 1;
selfX = entityX - 1 - width;
} else if (selfX  prevEntityXW) {
selfX = entityXW + 1;
selfXW = entityXW + 1 + width;
}
}
}
Вот документация по коду, которую я использовал для этого.
Довольно просто и отлично работает с краями.
Я также пробовал ИИ сгенерированный подход, такой как

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

if (
selfYH > entityY &&
selfY < entityYH &&
selfX < entityXW &&
selfXW > entityX
) {
// Calculate overlaps on both axes
const overlapY = Math.min(selfYH - entityY, entityYH - selfY);
const overlapX = Math.min(selfXW - entityX, entityXW - selfX);

// Resolve the smaller overlap first
if (overlapX < overlapY) {
// Resolve X-axis collision
if (selfXW >= entityX && prevSelfXW < prevEntityX) {
selfXW = entityX - 1;
selfX = entityX - 1 - width;
} else if (selfX  prevEntityXW) {
selfX = entityXW + 1;
selfXW = entityXW + 1 + width;
}
} else {
// Resolve Y-axis collision
if (selfYH >= entityY && prevSelfYH < prevEntityY) {
selfYH = entityY - 1;
selfY = entityY - 1 - height;
} else if (selfY  prevEntityYH) {
selfY = entityYH + 1;
selfYH = entityYH + 1 + height;
}
}
}
Но он проходит даже больше, чем тот, который я использую, даже на углах. Что-то не так с этим кодом? как мне заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... th-corners
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как анимировать индикатор в виде прямоугольника с закругленными углами?
    Anonymous » » в форуме CSS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Реализовать индикатор выполнения прямоугольника со скругленными углами, используя PyQt5
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Реализовать индикатор выполнения прямоугольника со скругленными углами, используя PyQt5 [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Обнаружение ложного столкновения SFML [закрыто]
    Гость » » в форуме C++
    0 Ответы
    80 Просмотры
    Последнее сообщение Гость
  • Реагирование на события медиа-кнопки: MediaSession против MediaButtonReceiver
    Гость » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость

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