2-я круговая реакция столкновения в Node.js - PullRequest
0 голосов
/ 23 января 2020

Я делаю простую 2d игру. Существуют сущности, которые являются игроками и деревьями.

Когда игра запускается, некоторые деревья создаются и размещаются случайным образом.

Когда кто-то присоединяется к игре, создается сущность игрока.

Каждая сущность выглядит так:

type: "tree" | "player",
position: {
  x: float,
  y: float
},
collisionRadius: int,
...otherAttributes

Игрок может двигаться; и я хотел бы, чтобы, когда он сталкивался с деревом или другим игроком, он реагировал.

Я проверяю, сталкиваются ли два объекта, используя это:

function collides(
  p1,
  p2
) {
  const dx = p1.position.x - p2.position.x;
  const dy = p1.position.y - p2.position.y;
  const distance = Math.sqrt(dx * dx + dy * dy);

  if (distance < p1.collisionRadius + p2.collisionRadius) {
    return true;
  }

  return false;
}

И мы можем использовать это следующим образом:

const player = new Player();

// player.type -> "player"
// player.position.x -> 8965.9
// player.position.y -> 535.1
// player.collisionRadius -> 37

const tree = new Tree();

// tree.type -> "tree"
// tree.position.x -> 8003.0
// tree.position.y -> 535.1
// tree.collisionRadius -> 45

// After the player moves a bit

// tree.position.x -> 8003.0
// player.position.x -> 7993.5

collides(tree, player); // true

Если дерево и игрок сталкиваются, игрок должен быть оттеснен по сторонам дерева. То есть, если два игрока сталкиваются, один движущийся должен быть сдвинут в стороны другого, но другой должен быть отброшен назад. (как это не stati c как дерево)

Как я могу это сделать?

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...