Что входит в простую игру UDP?

17

Однажды я пытался написать простую игру с UDP за неделю в качестве одноразового теста. Это пошло ужасно.

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

Может быть, этот метод не самый простой способ? Я подозреваю, что это так, но я спроектировал это неправильно с самого начала и понял, в конце 2-го дня. (так что я не выучил слишком много или потратил столько времени)

Для себя и других: что подразумевается под простой игрой UDP и как мне ее написать? Или как мне решить проблему предсказания, восстановив ее состояние должным образом.

Я отмечу это как CW до н.э. Я знаю, что будет много полезных ответов.

user1047
источник

Ответы:

9

Гленн Фидлер написал отличный набор статей по этому вопросу, который охватывает почти все основные концепции.

falstro
источник
Статья «Детерминизм с плавающей точкой» взорвала мою голову. Слишком плохое состояние синхронизации не сделано, потому что это то, что я хотел прочитать. Хотя детерминизм с плавающей запятой отвечает на многие вопросы.
Ни в одной из этих статей не
говорится
3

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

Я использовал оба ENet и RakNet . Я использовал Enet только в простой игре, но он делал то, что мне было нужно. Enet использует API более низкого уровня, чем Raknet. Ракнет использовался в более крупном проекте. Raknet чрезвычайно мощен, но хочет, чтобы вы структурировали свою игру на основе платформы Raknet.

Enet:

  • Управление подключением
  • Последовательность действий
  • каналы
  • надежность
  • Фрагментация и сборка
  • агрегирование
  • адаптируемость
  • портативность
  • свобода

RakNet:

  • Репликация объекта
  • AutoPatcher
  • Безопасные соединения
  • Надежный коммуникационный уровень (в основном все функции Enets объединены в один элемент)
  • Удаленные вызовы процедур
  • Голосовая связь
  • NAT прорыв
оборота deft_code
источник
+1 за ENet, я уже давно пользуюсь им для клиентов и им это нравится.
Лен Холгейт
Он спрашивает о синхронизации состояний - этот ответ не имеет к этому никакого отношения
BlueRaja - Danny Pflughoeft
-1, та же причина, что и у BlueRaja
Джонатан Дикинсон
2

Если у вас есть время и энергия, вы можете скачать исходник Quake 3 и изучить его. Это довольно легко понять, если вы чувствуете себя комфортно с C, и одинаково легко возиться с.

Какие другие многопользовательские игры имеют доступный исходный код и используют UDP?

BRaffle
источник
1
Есть статья, которая описывает код тоже. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
zooropa
0

Если вы станете доморощенным (как я), вы узнаете тонны - и о вещах, которые вы не хотели знать. Как прохождение NAT. По словам Каспина, Enet упускает это, но вы всегда можете найти код STUN с открытым исходным кодом, который работает в большинстве ситуаций.

Йонас Быстрём
источник