Как реализуется контроль передвижений персонажа на сервере или на клиенте?

Интересует следующее. Допустим у нас координатная сетка. 10 на 10 По середине на стоит стена. Чем контролируется может ли персонаж пройти по этому месту или нет. Сервером или клиентом? Если сервером. То мне немного не понятно как именно это реализовать. Моей фантазии хватает лишь на то чтоб прописать все координаты где не может пройти персонаж. Но это ведь очень много будет жрать ресурса. просчет всех передвижений персонажа. Не говоря уже что если их будет много. И карта будет не 10 на 10. Если можно то укажите литературу которая это освещает.
  • Вопрос задан
  • 864 просмотра
Пригласить эксперта
Ответы на вопрос 6
Движение (изменение координат), как и прочая логика изменяющая состояние объекта - на сервере. Отрисовка на клиенте, для сглаживания действий используется интерполяция. Почитайте про интерполяцию, экстраполяцию, сглаживание лагов.

Но это ведь очень много будет жрать ресурса. просчет всех передвижений персонажа. Не говоря уже что если их будет много.

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

Если можно то укажите литературу которая это освещает.

https://habrahabr.ru/post/328702/
https://habrahabr.ru/company/mailru/blog/220359/
Ответ написан
AlexMaxTM
@AlexMaxTM
Контроль всегда должен осуществляться только на стороне сервера! Любой клиент можно взломать (хотя и сервер иногда тоже). Только сервер посылает клиенту объект, его характеристики, его текущие координаты, его свободу перемещения относительно точки отсчета. Клиент только отображает, то что прислал ему сервер.
Ответ написан
Комментировать
@a0lwq
Клиентом - быстрее.
Сервером - защита против читеров.

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

Хорошая система проверяет 2 раза:

На клиенте - чтобы быстро перерисовать.
Затем на сервере - для контроля.
Потом, получив подтверждение на сервер клиент перерисовывает в нужном месте еще раз.
Ответ написан
Комментировать
Ni55aN
@Ni55aN
Как реализуется контроль передвижений персонажа на сервере или на клиенте?


На клиенте вычислять передвижения на каждом кадре (например при VSync это будет каждые 16 мс), а на сервере это будет вычисляться при каждом запросе (пусть, если с WebSockets, то это будет примерно каждые 100 мс) и синхронизироваться на клиенте. Главное, чтобы достоверная позиция определялась на сервере путем вычисления по ускорению и направлению, передаваемых от клиента (или другим параметрам, зависит от специфики игры), а клиенту передавать полученную позицию

Чем контролируется может ли персонаж пройти по этому месту или нет. Сервером или клиентом?


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

Моей фантазии хватает лишь на то чтоб прописать все координаты где не может пройти персонаж

Есть 2 варианта:
1. Сцена будет состоять из строгой сетки (как в Bomberman), тогда и информацию о объектах можно хранить в виде двумерного массива (для сцены 10х10) это будет занимать 100 элементов, и проверить столкновение будет просто. Если, например, персонаж находится в (8, 3) и хочет пойти вправо, тогда нужно проверить, есть ли объект на позиции (9, 3)
2. Использовать примитивы (линии, полигоны, окружности) для описания сцены в вещественных координатах. Здесь уже посложнее. Стоит применить такие библиотеки как Box2D
Ответ написан
Комментировать
ivanvorobei
@ivanvorobei
iOS разработчик, канал https://t.me/sparrowcode
Опять же, огромный колбек. Реализация должна учитывать и сервер, и клиент. Но стену надо реализовывать на клиенте. А вот хранить ее характеристики - на сервере

Если с сервера была подгружена сетка с характеристиками (стеной), то нет проблемы на клиенте не дать пройти сколь ее
Ответ написан
@4iloveg
Full-Stack HTML Developer
Мало того что сервер должен проверять доступность координат для перемещения на них. Но и скорость с которой человек перемещается. Тот же WOW на пиратках - читы позволяли летать по всей карте со скоростью в 100раз превышающую обычную + много другого.
Так что если делаешь серьезный проект то как написали выше - на клиенте только фронтенд, вся логика только - на сервере
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы