Обнаружение мировых изменений вне области просмотра в архитектуре клиент / сервер - PullRequest
0 голосов
/ 08 мая 2019

Представьте себе большую комнату (4000 х 4000 ч), в которой находятся игроки и предметы (объекты мира). Комната пространственно разделена сеткой 10 x 10 для обнаружения столкновений и изменений в окне просмотра игрока.

enter image description here

  • Зеленый прямоугольник: Item
  • Красный прямоугольник: окно просмотра игрока

В настоящий момент на сервере каждый игрок содержит список всех объектов мира в своем текущем окне просмотра. Когда игрок меняет свою позицию, новые элементы обнаруживаются в окне просмотра, по сравнению с его текущим списком видимых объектов, и изменения отправляются клиенту. Его текущий видимый список обновляется новыми найденными объектами

HashSet<WorldObject> changes = new HashSet<>(foundObjects);
changes.removeAll(player.getVisibleObjects());

Клиент ведет список всех сущностей, которые он видел, отображает их в мире и ждет нового ввода.

Теперь моя проблема возникает , когда другой игрок берет предмет, уведомляет об этом окружающих игроков, соответствующим образом обновляет локальный список предметов и прекращает рендеринг предмета. Это отлично работает. Но игроки за пределами области просмотра не уведомляются об этих изменениях, поэтому, как только они окажутся в сетке, они все равно увидят визуализируемый элемент.

Как обычно решаются подобные проблемы? Мой подход хорош?

...