Я думаю о создании сетевой игры.
Игра должна быть двухмерным платформенным шутером, созданным с помощью Libgdx и Box2D.
Для сетевой игры я планировал следующую структуру:
- Сервер и клиент это 2 программы
- Сервер обрабатывает ВСЮ игровую логику
- Клиент отправляет ввод с клавиатуры/мыши
- Сервер реагирует на это и обновляет весь уровень
- Сервер отправляет эти обновления (по возможности 45 раз в секунду, поэтому интерполяция на стороне клиента не требуется)
- Клиент получает обновления и обновляет свой локальный уровень/мир, используя полученные обновления.
- Клиент рисует вещи в своем
view frustum
Первый вопрос: что вы думаете об этой структуре?
Следующий вопрос: 45 раз в секунду может быть много загрузки данных с сервера, если есть несколько игроков, которые стреляют много пуль (нужны позиции игроков и пуль). для отправки).
Чтобы ограничить необходимую загрузку, я подумал об использовании view frustum culling
и отправке только тех данных/обновлений, которые клиент действительно увидит.
Теперь я увидел метод KryoNet
sendToAllTCP
и задался вопросом, является ли этот метод каким-то образом более эффективен и может каким-то образом загружать данные только один раз, а не один раз для каждого клиента.
У меня нет опыта работы с сетями, и я действительно не думаю, что можно иметь 1 загрузку для более чем одного клиента. Но, чтобы быть уверенным, я спрашиваю.
Так эффективнее отправлять каждое обновление уровня с sendToAllTCP
или эффективнее отправлять один раз для каждого клиента, а затем только то, что они могут видеть?