В-общем пока что хочу сделать просто перемещение (WASD) кубиков-игроков по сети и в перспективе стрельбу шариками. Почему-то мне всегда казалось, что сделать сетевое перемещение это весьма просто. Однако прочитал я вот это:
https://developer.valvesoftware.com/...g_compensation
http://www.racer.nl/tech/multiplayer.html
И был впечатлён.
Переварив в голове прочитанное плюс более ранние знания, я придумал себе такой список действий, чтоб побегать с пацанчиками:
1. Определить понятие NMO — Net Manipulated Objects. То есть то, что может изменяться по сети.
2. Определить понятие Snapshot — "снимок" состояний всех NMO в определённый момент времени.
3. Определить понятие синхронизации. Вести отсчёт по миллисекундам с начала игры (или просто по системным миллисекундам). Например номер снапшота 100 соответствует стольки-то мсек на сервере и стольки-то на клиенте.
4. Определить понятие события. Например "подключился новый игрок" и "среспаунился новый разрушаемый ящик" или "ящик был разбит к чёртовой бабушке".
5. Запилить линейную интерполяцию NMO на клиенте. Время на клиенте всегда на 100 мсек меньше чем на сервере, чтобы было что интерполировать. Например для теста запилить NMO-куб, который будет по кругу летать на сервере и чтоб он отображался на клиенте. Пока без управления со стороны игрока.
6. Запилить игроков и передачу управления на сервер.
7. Запилить предсказание на клиенте и сверку с ответом сервера.
Думаю на начальном этапе от предсказания на клиенте пока можно отказаться (лагать будет управление на 100 мс, но жить можно в принципе, а если игра не FPS, то и вовсе будет незаметно).
В-общем, буду благодарен, если кто-то, имеющий отношение к, раскритикует мой список и укажет на явные недостатки, чтоб я не ходил по граблям.
А также выслушаю ваши предложения относительно организации мультиплеера.