Методи синхронізації в онлайн іграх
Доброго дня %USERNAME%.
З'явилося бажання навчиться повноцінно писати мультиплеєр гри. Поки не важливо яка мова. Потрібна теорія.
З рештою все зрозуміло, але саме з методами синхронізації все погано.
Які методи використовуються у сучасних іграх?
Який метод використано, наприклад, у казуалці TeeWorlds?
Ах так, жанр нехай буде платформер.
Якщо брати CounterStrike, то там працює така логіка
Кожен гравець має свою latency (мережева затримка). На кожен момент часу сервер знає вектор руху, координати, поточну дію гравця, середовище, в якому він знаходиться. По кожному з гравців розраховується прогноз результату, який був би через половину часу затримки сигналу. Тому приймається рішення, що гравець пересунеться в потрібну позицію, отримає шкоду, помре або ще що. Ухвалення рішення не виконується, доки не буде підтверджено, що гравець дійсно залишився в тому місці, яке і було передбачено. Тому виникає ситуація, коли гравець з нижчим latency помирає за рогом від пострілу гравця з вищими затримками.
Ситуація на сервері та в клієнті трохи асинхронна, гравець може змінити своє місце розташування в клієнті, але сервер дізнається про це лише через час.