Я делаю простую 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 как дерево)
Как я могу это сделать?
Большое спасибо.