Как реализовать строчную модель для RTS-игры?

В моих усилиях изучать программирование я пытаюсь сделать небольшую игру в стиле RTS. Я googled и прочитал много статей и gamedev q & a на тему синхронизации синхронизации в многопользовательских играх RTS, но у меня все еще возникают проблемы с тем, чтобы обманывать, как реализовать его в моей собственной игре.

В настоящее время у меня простая серверная /клиентская система. Например, если игрок1 выбирает блок и дает команду для его перемещения, клиент отправляет команду [move, unit, coord] на сервер, сервер запускает функцию поиска пути и отправляет [move, unit, path] всем клиентам, которые затем перемещает блок и запускает анимацию. Пока это так хорошо, но не синхронизировано для клиентов с задержкой или более низким /высоким FPS. Как я могу превратить это в настоящую систему блокировки?

Правильная методология должна быть примерно такой, как показано ниже:

Включить 1 запуск

  1. собирать командные входы от игрока1
  2. отправить на сервер номер и команды на очереди
  3. end turn, increment turn number

Сервер получает команды, запускает поиск пути и отправляет пути всем клиентам.

Следующий поворот

  1. получить пути от сервера, а также подтвердить, что все клиенты завершили предыдущий поворот, в противном случае приостановить и дождаться этого подтверждения.
  2. перемещение единиц
  3. собрать новые входы
  4. конец очереди

Это суть? Должно быть, путь и другая логика игры должны выполняться на стороне клиента, а не на сервере, если да, то почему? Есть что-то еще, что мне не хватает? Я надеюсь, что кто-то может сломать концепцию, поэтому я понимаю ее лучше.

5 голосов | спросил Anonymous Entity 25 PMpThu, 25 Apr 2013 18:53:21 +040053Thursday 2013, 18:53:21

2 ответа


3

https://gamedev.stackexchange.com/search?q=client+prediction

Вам нужно будет делать прогнозы на стороне клиента для решения проблем с задержкой.

В сущности, делайте все точно так же, как вы настроили, но когда клиент отправляет команду на сервер, клиент предполагает, что команда действительна и выполняет алгоритмы маршрутизации и начинает двигаться. Затем сервер может проверить и отправить команду всем клиентам для имитации, пока сервер выполняет фактическое перемещение.

Единственный раз, когда вы хотите отправить данные устройства, - это когда единицы предпринимают новое действие. IE: Когда устройство начинает двигаться вверх после того, как оно двигалось влево. Клиенты предполагают, что устройство будет продолжать двигаться вверх, пока им не будет сказано иначе. То же самое следует за атакой и выполнением действий.

Этот стиль используется в играх типа MMO, таких как World of Warcraft.

другая ссылка: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/

ответил UnderscoreZero 25 PMpThu, 25 Apr 2013 19:21:42 +040021Thursday 2013, 19:21:42
2

Вот как я это понимаю:

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

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

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

ответил Clinton 2 62013vEurope/Moscow11bEurope/MoscowSat, 02 Nov 2013 00:03:56 +0400 2013, 00:03:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132