Формула / математические расчеты для перемещения игрока вперед на основе направления движения

Я довольно плохо разбираюсь в математике, и мне нужна помощь в продвижении игрока вперед для инструмента, над которым он работает для игры, но единственная информация, которая у меня есть, - это то, в каком направлении стоит игрок, и мне нужно перевести это в приращения координат x и y или декремент.

Поэтому, если мы говорим, что M - это направление, в котором стоит игрок, а M переходит от 0,00000 до 5,9999999, а затем возвращается к 0,000, при этом верно следующее:

0 = North
1.5 = West
3 = South
4.5 = East

Если бы я хотел переместить игрока на север, я бы сделал y + количество, юг - это y - количество, а если я хочу переместить игрока на восток, я бы сделал x - количество, а запад - x + количество.

Таким образом, перемещение игрока вперед легко, когда он смотрит в абсолютном направлении, например, M равно 0, поэтому я просто добавляю 5 к координате y. Но если игрок стоит лицом к лицу, скажем, 1.2, то есть почти на западе, что бы я добавил к X и Y, чтобы точно переместить их вперед, предположительно, я бы добавил, скажем, 5 к x и некоторый процент от 5 к y.

Нужна помощь тех, кто умеет разбираться в такого рода вещах, и любая помощь очень ценится. Псевдо-код и помощь любого рода приветствуется, спасибо всем!

1 ответ

Решение

Если x а также y текущие координаты, dir текущее направление в ваших 1-6 единицах, и amount это расстояние для перемещения, ваши новые координаты будут

angle = dir * pi / 3
newx = x + amount * sin(angle)
newy = y + amount * cos(angle)

Если вы действительно хотите просто декременты, просто удалите x и y из формул.

Обратите внимание, что это использует тригонометрию. Большинству компьютерных языков нужен угол в радианах, поэтому первая строка преобразует данный угол направления в радианы.

Также обратите внимание, что ваши направления значений угла направления и направления увеличения координат x и y нестандартны. Поэтому те, кто знает триг, могут быть смущены при использовании cos с координатой х и sin для координаты у, так как они не являются стандартными. Но это то, что нужно в вашем случае. Как только что отметил @HighPerformanceMark в комментарии, вам следует подумать об изменении ваших углов направления и координат x и y на нечто более стандартное. Тот, который он предлагает, 0 градусов для севера и 90 градусов для востока, является стандартным в навигации. Другой стандарт, используемый в тригонометрии, составляет 0 градусов или радиан для восточной части и пи /2 радиана или 90 градусов для северной части.

Другие вопросы по тегам