Задать вопрос

Как лучше реализовать клиент-серверную игру?

Делаю простую игру (для себя) в целях самообразования. Непонятно какой функционал должны иметь объекты игрового мира на клиенте и на сервере. Одинаковый или же допустим, игровой объект на клиенте несет в себе только методы по его визуализации (анимациии, звук, позиция), а на сервере объект имеет его игровые параметры (сколько у него жизней, сколько урона он наносит, расчет колизии и т д)
  • Вопрос задан
  • 1122 просмотра
Подписаться 7 Оценить Комментировать
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Как я понял: речь про баланс: контроль игрового мира <-> объём передаваемых данных по сети.
Вопрос хороший.
Не всегда нужно делать всё на сервере, иначе объём трафика - возрастёт дико во время игры. Но также, нельзя доверять клиентским данным.
Поэтому, всегда делается аппроксимация: промежуточная визуализация - вычисляется на клиенте, а пришедшие на сервер данные - всегда тщательно проверяются сервером в рамках логики(модели) работы игрового мира. И если отклонения слишком велики - фиксируется "читерство", иначе - по получению новых позиций объектов, клиент плавно, но с ускорением ("параболически") устраняет расхождения с серверным игровым миром: синхронизирует актуальное состояние мира сервера с отображаемым пользователю.
Это происходит в 99% случаев незаметно для глаз игрока за монитором.

На сервере и на клиенте - лучше всего дублировать логику механики и синхронизировать каждые N-кадров или принудительно по каким-либо важным игровым событиям.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
В случае с работкой игры имеет смысл делать тонкий клиент и толстый сервер. То есть стараться реализовывать максимум функционала на сервере, а клиент использовать только для визуализации
Ответ написан
Epsiloncool
@Epsiloncool
Программер, веб-девелопер, гейм-девелопер
В своих игровых проектах я использую технологию Fully Authoritative Server. В этой технологии читерство весьма затруднительно, а объём передаваемых по сети данных невелик. Вся логика выполняется на сервере, все существенные для игрового процесса решения также принимаются там. Клиент берёт на себя роль отрисовщика игрового мира (на сервере только макет игрового мира в виде данных, без графики), также на клиенте осуществляется Client Prediction (то есть предварительная симуляция), при том, что если в результате сравнения полученных данных на клиенте и сервере обнаруживается нестыковка, то используются данные, полученные с сервера.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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