Я создаю платформерную игру, которая имеет «кооперативную» функцию, с которой я бы хотел работать в сети / интернете.
Теперь я прочитал о программировании сетевых игр, включая такие статьи, как « Что должен знать каждый программист о сетевых играх», и поэтому я понимаю разницу между такими технологиями, как архитектура одноранговой блокировки и архитектура прогнозирования сервер-клиент:
- Я пришел к выводу, что для любой игры в реальном времени, в которую будут играть по интернету, одноранговый шаг просто не подходит.
- Я также обеспокоен тем, что даже для платформера простая клиент-серверная архитектура (без какого-либо предсказания клиента) приведет к ухудшению игрового процесса из-за задержки между действием и реакцией, вызванной обращением к серверу. (Сказав, что я хочу устранить необходимость в центральном сервере, и поэтому только один из игроков, клиент, фактически будет испытывать это отставание).
Это оставляет предсказание клиента, но даже для такой простой игры, как платформер, это звучит довольно сложно.
Как мне создать работающую клиентскую прогностическую систему для многопользовательской платформерной игры?
networking
multiplayer
platformer
Джастин
источник
источник
Ответы:
Я не думаю, что половина вашей кодовой базы превратится в сетевой код, если вы решите реализовать такую функцию, как эта.
На мой взгляд, самый простой способ сделать это - настроить «центральный» сервер (даже если это означает, что один игрок «размещает» игру, а затем подключается к своему собственному серверу), который принимает все пользовательские данные как можно быстрее. и отправляет его обратно каждому клиенту.
На клиенте вы реализуете это не иначе, как если бы вы проводили совместную игру для двух игроков локально, за исключением того, что вы читали P1 с клавиатуры и P2 из сети.
Вам потребуется, чтобы сервер время от времени отправлял полное игровое состояние, и оба клиента могут либо привязаться к новому состоянию authoratitave с сервера, либо они могут перейти в новое состояние (в течение нескольких секунд). Если у вас ужасная потеря пакетов или тонны клиентов на сервер, такого подхода должно быть достаточно для описанной ситуации.
источник
У меня полностью функциональная игра в стиле mMORPG с предсказанием клиента (игра далека от завершения, но она работает «ОК»), и у меня есть что-то около 40 000 строк кода для сервера и удвоение для клиента (добавьте такое же количество для инструментов и т. Д. .). Предсказание, вероятно, составляет не более нескольких сотен строк (если даже это), и вся сеть разделяет пару тысяч строк, но не более, чем, скажем, 5000 (немного зависит от того, где вы проводите линию).
Нечеткий вопрос нечеткий ответ ;-)
источник
Значительная часть сетевого кода может быть независимой от игры, в которую вы играете. Из-за этого и из-за того, что вы новичок в сети, первое, что я бы предложил вам сделать, - это найти библиотеки, которые будут работать для вас. РакНет например.
Одна вещь, которую вы захотите в своем игровом коде, - это способность обрабатывать несколько различных состояний игры, которые вы можете использовать для интерполяции и прогнозирования. Это довольно просто спроектировать заранее, но может потребовать значительных усилий, если вы вносите изменения в существующую однопользовательскую игру.
Также обратите внимание, что если вы хотите, чтобы незнакомые люди играли в одноранговую игру через Интернет, вам, вероятно, понадобится хотя бы один сервер, который бы где-то занимался лобби / организацией матчей.
источник