Оригинальная статья: Fast paced multiplayer.
Основной проблемной в мультиплеерных играх является разница (latency) между действием пользователя и реакцией сервера на него, называемая задержкой. Для пользователя, играющего с высокой задержкой, игра выглядит менее отзывчивой и прерывистой.
Но сетевая задержка является не единственной причиной снижения отзывчивости игры. Сразу после получения состояния мира клиентом ему еще необходимо его визуализировать (анимировать), что еще больше увеличивает время отклика на действия пользователя.
Наиболее актуальна эта проблема при использовании модели Авторитетного сервера, требующая считать состояние игрового мира, хранящегося на сервера - эталонным. Клиенты в этой модели являются обычными зрителями, способными влиять на игровой мир пересылкой команд пользователя на сервер и ожидая отклика.
Простейшим решением проблемы является Прогнозирование. Оно заключается в немедленной визуализации действий пользователя на клиенте, не дожидаясь реакции сервера.
Учитывая модель Авторитетного сервера, такое решение позволит снизить время отклика только в начале действия, но после получения состояния сервера объект игрового мира начнет дергаться.
Для сглаживания прерывистости, вызываемой Прогнозированием, можно применить механизм Согласования состояния игрового мира клиента с сервером.
Оно заключается в простом алгоритме:
- Каждое действие пользователя маркируется, передается серверу и сохраняется в истории клиента
- Сервер должен возвращать состояние игрового мира с маркировкой действия, вызвавшего изменения в нем
- При получении состояния от сервера, клиент должен переместить объекты в соответствии с этим состоянием, а так же применить все сохраненные в истории действия, выполненные пользователем до этого состояния