2016-05-09 3 views
2

Мне интересно, какой лучший способ реализовать сетевую модель для игры типа agar.io - я предполагаю, что это авторитетный сервер, но мне интересно about:Как реализовать агаровую сетевую модель игры в агаре.

  1. Каждый игрок «владеет» своей позицией и отправляет его на сервер, или каждый игрок просто отправляет свой вход, и все полностью авторитично на сервере?
  2. Как он решает, какие данные отправить на какой плеер? Я предполагаю, что для каждого игрока мне придется перебирать всех игроков на сервере и проверять, являются ли они в настоящее время (или скоро будут) видимыми, и если они начнут отправлять данные по ним
  3. Где происходят фактические столкновения , и как справиться с задержкой?

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

ответ

1

модель в agario показывает 2 вещи:

  1. Вы можете видеть других игроков едят одни и те же точки, так что показывает игроки получают позиции всех игроков (вероятно, около 5 раз в секунду) а затем появляющиеся и исчезающие точки обрабатываются на стороне клиента. Если точки не обрабатывались на стороне клиента, это стоило бы огромной пропускной способности. Это также означает, что вы получаете сообщение, содержащее позиции всех точек при запуске, что имеет смысл, потому что не все точки есть в начале
  2. Входы от игроков на сервер отправляются в противоположность позициям, поскольку в противном случае это было бы чрезвычайно взломан. Затем логика для коллизий обрабатывается на сервере

Если входные данные другого игрока были переданы (вместо позиций) от сервера к клиентам после того, как сервер получил их, небольшие различия будут нарастать, как эффект бабочки, и вызвать хаос

Я уверен, что входы посылаются только 5 раз в секунду, потому что есть problem with websockets, который вызывает пакеты отправлены более чем в 5 раз в секунду, чтобы быть слипаются вместе