Skip to content

ChipsGaming/headshot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Оригинальная статья: Fast paced multiplayer.

Проблемы мултиплеера

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

Простое клиент-серверное взаимодействие

Но сетевая задержка является не единственной причиной снижения отзывчивости игры. Сразу после получения состояния мира клиентом ему еще необходимо его визуализировать (анимировать), что еще больше увеличивает время отклика на действия пользователя.

Сетевая задержка + анимация

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

Прогнозирование

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

Прогнозирование

Учитывая модель Авторитетного сервера, такое решение позволит снизить время отклика только в начале действия, но после получения состояния сервера объект игрового мира начнет дергаться.

Проблемы прогнозирования

Согласование

Для сглаживания прерывистости, вызываемой Прогнозированием, можно применить механизм Согласования состояния игрового мира клиента с сервером.

Согласование

Оно заключается в простом алгоритме:

  1. Каждое действие пользователя маркируется, передается серверу и сохраняется в истории клиента
  2. Сервер должен возвращать состояние игрового мира с маркировкой действия, вызвавшего изменения в нем
  3. При получении состояния от сервера, клиент должен переместить объекты в соответствии с этим состоянием, а так же применить все сохраненные в истории действия, выполненные пользователем до этого состояния