У меня 2D многопользовательская браузерная игра.Игра содержит змееподобных игроков и мир, заполненный сеткой разноцветных блоков.
В настоящее время я отправляю эти данные с сервера:
- , если появляется новый игрок - данные обо всех блоках и игрокахему и данные о недавно появившемся игроке другим
- , если кто-то меняет свой ход - данные о его следе, позиции и направлении к каждому
- , если цвет некоторых блоков изменяется - данные об этомВсе
Поэтому я не отправляю избыточные данные, но отправляю все данные всем.Мошенник с измененным клиентом мог видеть все!Поэтому мне нужно отправлять данные клиентам, основываясь на их окне просмотра.
Для змееподобных игроков я, вероятно, проверю мин и макс, X и Y игрока.
Если игрок А получаетРядом с игроком B сервер отправит клиенту A данные об игроке B. Если игрок A слишком далеко от игрока B, сервер удалит игрока B из клиента A. Сервер отправит данные об изменении игрока B, только если игрок A находится рядом.
Главный вопрос
Но я не уверен, как мне отправлять данные о блоках.Боюсь, я отправлю слишком много избыточных данных.
Когда появится игрок, я отправлю ему данные о блоках рядом с ним.Также, когда цвет блоков рядом с ним изменится, я отправлю ему его.
Если игрок отправится влево, я отправлю ему данные о блоках слева.Но как часто я должен это делать?Должен ли я отправлять ему новые блоки каждый раз, когда он проезжает расстояние в один блок?
Что, если игрок решит пойти туда, где он уже был?Должен ли я отправить ему снова избыточные данные?Или я могу проверить, не были ли изменены блоки.Но как я могу вспомнить, что игрок уже видел несколько блоков?Вероятно, я не могу вспомнить все блоки, которые видел игрок (количество блоков слишком велико).Это ухудшит производительность.
Как я могу защитить свою игру от мошенников с зумом и не снизить производительность?