Плавное движение MultiPlayer - PullRequest
5 голосов
/ 19 января 2011

Я разрабатываю многопользовательскую ролевую игру, (Нет, это не mmorpg.;)

Моя текущая настройка такая.

Клиент сообщает серверу «Я хочу двигаться вперед» / «Я хочу двигаться назад», затем сервер обновляет вашу сущность и информирует всех клиентов в области об изменении.Сервер также обновляет каждую сущность каждые 20 мс и отправляет обновления каждые 100 мс клиентам, эти обновления содержат положение, скорость, вращение и т. Д.

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

Так что сейчас я просто делаю что-то вроде «Position = Packet.Position», что вызывает очень заикающиеся движения.

Итак, с чем я хочу помочь, как мне получить более плавное движение?Посматривал на образец прогноза XNA, но я не мог сделать это правильно.

Спасибо // F

Ответы [ 3 ]

12 голосов
/ 19 января 2011

Чтение Описание Valve их многопользовательского протокола . Это должно быть поучительно и дает очень четкий пример того, как вы делаете прогноз / интерполяцию.

3 голосов
/ 19 января 2011

Я бы предложил идею из другого вопроса (см. Принятый ответ)

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

Тот же алгоритм использовался в Ultima Online (по крайней мере, когда я играл в него 10 лет назад)

0 голосов
/ 19 января 2011

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

Затем я постепенно настраиваю реальное существо на то место, где находится призрак.

...