Как мне создать простой RPG игровой сервер? [закрыто]

8

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

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

Как у меня есть сервер, управляющий «миром» для этой игры? Это должен быть сервер определенного типа, или я могу использовать Node.js или что-то еще, что я хочу?

duxfox--
источник

Ответы:

17

Вы на правильном пути.

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

  • в оперативной памяти в мире представление ,
  • список подключенных игроков ,
  • игровой цикл (с , например , обработчик управления игроком, физический движок и AI).

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

Более сложные конфигурации клиент-сервер могут включать

  • дельта-сжатие (отправка только того, что изменилось между игровыми состояниями, а не всего игрового состояния) по соображениям производительности,
  • предсказание ввода на стороне клиента для уменьшения предполагаемой задержки ввода (например, управление CS: GO ),
  • на диске базы данных (например , Мир Warcraft «ы хранения инвентаря),
  • разгружая работу на клиентских машинах (например Maple Story враг AI),
  • или соединение хэндовера между серверами (например , OpenSimulator «s мир сшивание).

Начните просто. Лучше добавлять сложность только по мере необходимости . Эта кроличья нора глубокая.


Вы упомянули Node.js : я написал несколько серверов для небольших игр, и это было хорошо. Но вы можете написать сервер и клиентов во что угодно. Eve Online находится в основном на Erlang , Minecraft на Java, почти все, что написано Valve на C ++ и так далее.

Анко
источник
Спасибо за подробный ответ! одна вещь, которая все еще смущает меня: так как игра написана с использованием набора спрайтов для iPhone, сервер вообще должен знать об этом? Я просто сбит с толку, потому что продолжаю думать, что игра в спрайт-комплекте, поэтому мир, предоставляемый сервером, также должен быть спрайт-китом. Что ты
думаешь
@AbdulAhmad Нет, вы можете создать сервер с любым языком или библиотеками. Имейте в виду, что ваш сервер является и должен быть полностью отдельным. Вы создаете два разных приложения, и вы должны думать об этом таким образом. Один для клиента и один для сервера. Часть, которая связывает их вместе, является протоколом связи между двумя приложениями. Хотя между ними должны быть согласованы другие детали (например, состояние игры), по сути они совершенно не связаны. Вы даже не будете использовать Sprite Kit на стороне сервера.
Нечеткая логика
@FuzzyLogic, поэтому, пытаясь понять это лучше. Если сервер предоставляет «мир» (изображения, физику и т. Д.), То клиенты (iPhone) не должны иметь ничего из этого, потому что клиент - это просто «представление» для этой среды. это правильно? Так я бы просто использовал sprite-kit на стороне клиента, чтобы просто придать визуальный слой данным, поступающим с сервера? Другими словами, игра должна быть построена в основном на стороне сервера (вся логика и т. Д.), А клиент - это только мое мнение, и где я могу отправлять события / команды на сервер. Это означает, что мне не нужен физический движок / игровая логика в sprite-kit
duxfox--
@AbdulAhmad Да! Клиент, который выполняет минимально возможную обработку, называется тонким клиентом . Это отличная отправная точка.
Анко
3
@AbdulAhmad Да и нет. Это хороший способ думать об этом, но в основном по соображениям эффективности, клиент обычно дублирует многие вещи, а не запрашивает у сервера все детали, иначе у вас, вероятно, будут проблемы с производительностью. Как уже упоминалось, это было бы хорошим началом. Это большая тема, есть много способов, много соображений и много частей, поэтому трудно полностью объяснить, как все это должно работать. Насколько это сложно, зависит от деталей вашей игры. Если честно, исходя из ваших вопросов, я не рекомендую вам пытаться сделать это еще.
Нечеткая логика