Синхронизация игровых спрайтов по сети в XNA

#networking #xna

#сеть #xna

Вопрос:

Я создаю 3D-игру для двух игроков, и мне нужно синхронизировать местоположение удаленного игрока. Только один объект, аватар, представляющий игрока, должен быть синхронизирован между двумя играми.

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

В текущем подходе одна игра является сервером, в то время как другая действует как клиент, отправляя координаты в виде текстовых строк через выделенный порт. По сути, они передают друг другу координаты аватара каждый раз, когда аватар действительно перемещается.

Есть идеи, как решить проблемы, связанные с задержкой при отправке / получении координат? Требуется только для работы по локальной сети.

Комментарии:

1. Также ознакомьтесь с этим вопросом на сайте разработки игры: gamedev.stackexchange.com/questions/11606 /…

Ответ №1:

Серия статей Гленна «Гаффера» Фидлера по сетевому взаимодействию для игровых программистов — это в значительной степени руководство по основам сетевого программирования игр. У него также есть статья о сетевой физике.

Многие методы, описанные в этой серии статей (например, надежность), уже реализованы для вас в библиотеках типа Lidgren.

В основном методы, которые вы хотите использовать, — это интерполяция, экстраполяция и прогноз. В этой статье из вышеупомянутой серии есть хорошее объяснение этого, плюс сетевая физика. По сути, вы берете ненадежный, запаздывающий поток данных о местоположении и используете это для визуально правдоподобной оценки фактического пути объекта.