Рассматривая изображение выше с плитками, разделенными на блоки 32х32, у меня есть сущность, которая помечена для «агрессивных» близлежащих игроков, приближающихся к ней. Я бы хотел, чтобы этот монстр идеально преследовал игрока (и продолжал преследовать игрока некоторое время). В настоящее время мое единственное движение выполняется через простой интерполятор для удаленных объектов, и это работает, потому что промежутки между обновлениями перемещения довольно малы.
Я не могу просто сказать клиенту, что монстр хочет переместиться в положение, в котором он / она находится, так как это приведет к тому, что сущность будет двигаться намного быстрее, чем должна (это, вероятно, можно решить с помощью некоторой математики для интерполяции). -эффективно) но что еще важнее это не выглядит реалистично и может обрезать стены! Я не хочу имитировать все движение на сервере, если этого можно избежать ... хотя я думаю, что мог бы, но это все равно не решило бы проблему отсечения. Я подозреваю, что решение включает в себя поиск пути и отправку клиентских периодических обновлений узлов и позволяет им имитировать движение, но я не уверен.
Благодарность!
источник
На самом деле это просто сделать. Направление движения будет целевой позицией минус текущая позиция. Все, что вам нужно сделать, это уменьшить масштаб этого вектора до необходимой вам скорости движения. Повторите каждый кадр.
Вам необходимо смоделировать движение на сервере. Как еще вы узнаете, что все игроки видят одинаковое поведение?
Вам понадобится базовый поиск пути. A * является стандартом. Вы можете рассчитать путь к цели, а затем следование этому пути - просто случай установки векторов движения, как описано выше. (Или вы можете использовать поведение руля, как в ответе Byte56, что по сути то же самое с некоторыми добавленными дополнениями.)
источник