Я работаю над многопользовательским игровым движком 2D-сервер-клиент (который вы можете попробовать здесь ). Он использует WebRTC DataChannel
s. (Соединения одноранговые, но хост-узел по-прежнему действует как сервер.)
Самая большая проблема (кроме возможности подключения) - это локальный входной прогноз. Мы делаем обычное: при нажатии клавиш игроки мгновенно двигаются, сообщают хосту, какие клавиши нажаты, получают данные обратно с хоста и сравнивают их с исторической позицией. Положение корректируется с течением времени, если есть разница. Это хорошо работает с низкой потерей пакетов или PDV , даже если пинг высокий.
Если есть потеря или PDV, отклонение может быть больше. Я думаю, это потому, что если первый пакет, указывающий на изменение ввода, задерживается или отбрасывается, хост узнает об этом позже и начинает менять этого игрока позже, чем показывает их локальный прогноз.
Если игрок движется, мы проверяем количество примененной коррекции, так как это менее заметно. Кажется, это закрывает пробелы, когда вы начинаете двигаться и во время движения. Однако любая коррекция более заметна, если они резко остановились. Затем, если PDV или потеря означают, что хост думает, что они остановились позже, хост перебегает, отсылает данные, говоря, что они немного впереди, и исправление заставляет игрока немного дрейфовать. На слабых связях игроки часто заметно дрейфуют после остановки.
Я не заметил этого в других играх. Как это можно смягчить?