У меня есть интерфейс типа point & click на клиенте, который запускает A * на сервере для поиска пути.
Игра управляется как RTS, но мир постоянен, поэтому игроки должны иметь возможность присоединиться / уйти в любое время, и на экране будет не более 30 единиц.
Каков наилучший способ синхронизации движений игрока между сервером и клиентом, после того как я вычислил пути?
Нужно ли серверу синхронизировать клиентов на каждом шаге / кадре анимации? или он может просто сказать клиенту "перейти в положение X, Y" для каждого узла на пути и каждого движущегося игрока? Или лучше всего запустить таймеры анимации как на клиенте, так и на сервере и синхронизировать их таким образом?
Каким будет типичный обмен данными для движения по траектории?
РЕДАКТИРОВАТЬ:
Некоторые из вас предлагали локстеп, потому что я сказал «RTS», но игра не RTS, она просто имеет такой же интерфейс. Большая разница в том, что мне нужно, чтобы игроки могли присоединиться и выйти из игры в любое время . Извините, что не уточнил.
источник
Как только путь рассчитан, сервер просто использует этот путь для управления персонажем. Наличие пути не имеет значения для этой проблемы - вы все равно просто отправляете те же данные, будь то регулярные обновления позиции или что-то еще. Обычно нормально отправлять обычные позиции (интерполированные на клиент для их сглаживания) и отдельное сообщение, когда устройство останавливается.
источник
В моей игре (многопользовательская игра типа RPG) я отправляю части пути клиенту (для NPC поблизости), т.е. 3 следующих позиции и Время, когда NPC должен быть там. Для игроков я просто отправляю последнюю действительную позицию + ее временную метку, чтобы на клиенте я мог сделать полный расчет (или что-то более сложное, если нужно).
Это работает вполне нормально, в основном потому, что нет столкновений между игроками / NPC (с низкой задержкой вы ничего не замечаете, например, с задержкой 250+ мс, вы заметите разницу, если увидите два экрана (двух игроков). ) в то же время, но это все еще не очень примечательно на «одном экране»).
Поэтому я бы сказал: займитесь авторской разработкой сервера (валидация позиций + метки времени игроков, а также для ИИ в начале, вы можете сделать более сложную систему для NPC позже без каких-либо больших проблем) + предсказание клиента.
пс. Я использую точность в миллисекунды, которая работает отлично, за исключением того, что подписанное int сохраняется только в течение приблизительно 3 недель, прежде чем я должен перезапустить сервер.
Возможно, вы также захотите проверить прогнозирование времени (т. Е. Попытаться максимально синхронизироваться с сервером).
источник