Що стосується простої гри UDP?


17

Я одного разу намагався написати тиждень просту гру з UDP як тест на викид. Це пішло жахливо.

Я його викинув рано. Головною проблемою у мене було відновлення ігрового стану всіх гравців / ворогів / об’єктів до старого стану та перемотування гри до моменту, коли грає гравець (тобто за півсекунди до стрибка. Трохи рано чи пізно можна змусити гравця пропустити стрибок)

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

Для себе та інших: Що стосується простої гри UDP і як я можу написати її? Або як я вирішу належним чином проблему прогнозування відновлення стану.

Я позначу це як CW Bc, я знаю, що буде багато корисних відповідей.

Відповіді:


9

Гленн Фідлер написав про це чудовий набір статей , який охоплює майже всі основні поняття.


Стаття про детермінізм з плаваючою точкою підірвала мені голову. Його надто поганий стан синхронізації не робиться, тому що це я хотів прочитати. Хоча детермінізм з плаваючою комою відповідає на безліч питань.

Жодна з цих статей не йде в глибину про стан синхронізації, про що він запитує
BlueRaja - Danny Pflughoeft

3

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

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

Enet:

  • Управління з'єднаннями
  • Послідовність
  • Канали
  • Надійність
  • Фрагментація та повторна збірка
  • Агрегація
  • Пристосованість
  • Переносність
  • Свобода

Ракнет:

  • Реплікація об'єкта
  • Автоматчик
  • Безпечні з'єднання
  • Міцний рівень зв'язку (в основному всі функції Enets зведені в одному елементі)
  • Віддалені виклики процедури
  • Голосове спілкування
  • NAT прорив

+1 для ENet, я вже деякий час використовую його для клієнтів і їм це подобається.
Лен Холгейт

Він запитує про стан синхронізації - ця відповідь нічого спільного з цим не має
BlueRaja - Danny Pflughoeft

-1, та сама причина, що і BlueRaja
Джонатан Дікінсон,

2

Якщо у вас є час і енергія, ви можете завантажити джерело Quake 3 і вивчити його. Зрозуміти це досить просто, якщо вам зручно C, і однаково легко повозитися.

Які ще багатокористувацькі ігри мають джерело та використовують UDP?


1
Там є стаття, яка також описує код. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
zooropa

0

Якщо ви їдете по-домашньому (як я), ви збираєтеся вивчати тонни - також про речі, які ви не хотіли знати. Наче обхід NAT. За словами каспіна, Enet цього не вистачає, але ви завжди можете знайти якийсь відкритий код STUN-коду, який працює в більшості ситуацій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.