Как синхронизировать многопользовательскую игру в режиме реального времени с сервисами Play

Я разрабатываю онлайн-версию популярной игры Pong с использованием Libgdx. Я начал использовать службу многопользовательской игры в реальном времени Google для отправки игровых данных между игроками, но не могу понять, как решить проблему синхронизации, с которой я столкнулся.

Информация, отправляемая в данный момент, является веслом игрока, поэтому, когда я двигаюсь, я отправляю свою новую позицию противнику. На момент получения противником время уже прошло и синхронизация потеряна.

Я понимаю, что должно быть некоторое время ожидания между движениями с использованием самого медленного соединения, но как мне сделать так, чтобы оно выглядело плавным?


person Enpi    schedule 22.04.2017    source источник


Ответы (1)


На этот вопрос нет однозначного ответа, но есть различные стратегии, которые люди адаптируют для решения этой ситуации.

Переход от использования протокола UDP (если вы используете связь на основе сокетов, которую я вам рекомендую, потому что каждая мс имеет значение в играх в реальном времени. Я думаю, что API Google имеет UDP, который является ненадежным обменом сообщениями. Опять же, у меня нет опыта работы с google-realtime-api) для обмен сообщениями с интерполяцией, точный расчет, предсказания на стороне клиента и т. д. — это лишь некоторые из них.

Это очень обширная тема, чтобы ответить здесь. Когда я делал свою многопользовательскую игру, основанную на танках, я сделал несколько вещей, чтобы все выглядело более плавно.

  1. Использовался протокол UDP для отправки перемещений на сервер.
  2. Я оставлю две записи на стороне клиента для игрока. Одно — это текущее значение, а другое — значение, которое нужно установить. Затем я умножу текущее значение на коэффициент сглаживания, например 0,3f, до тех пор, пока оно не будет равно установленному значению. (Это помогает уменьшить дрожание)
  3. Я бы отправлял важные сообщения через TCP.

Пункты, которые я упомянул, описывают то, что я делал в своей игре, но могут быть использованы в любой другой. Хотя я бы посоветовал вам прочитать статьи на этом веб-сайте под названием Gaffer on Games.

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

person Sneh    schedule 24.04.2017