client -side prediction в игре

Sep 04, 2009 16:52

После 3 дней разработки сделал client-side prediction для сети.

Суть игры такова Сеть - клиент - сервер. Есть сервак, который
стимулирует симулирует игру (рассчитывает все взаимодействия,
перемещения игрока, физику и тд), если множество клиентов
(игроки, которые подсоединяются к серверу). Клиенты посылают
на сервер свои ввод с клавиатуры и мышки, сервер рассчитывает
перемещение игрока и посылает положение игрока на клиент.

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

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

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

image Click to view


игра с пингом 500, то есть сервер подтверждает позиции каждые полсекунды
(обычно для нормальной игры нужно где-то 50). Дергающейся зомби перед камерой-
это положение игрока на сервере.

Previous post Next post
Up