2012-06-02 5 views
1

Я кодирую сервер для многопользовательской RPG, и сейчас я борюсь с внедрением дальности обзора. Поскольку некоторые карты довольно большие, я должен ограничить то, что видит клиент. Мой подход:Дальность обзора, обновление позиции игрока

Если я получаю новые координаты от клиента, я сохраняю их как пункт назначения вместе с временем начала перемещения. Как только каждый х мс я просматриваю все существа в мире и обновляю их текущую позицию, после сохранения позиции они были в последний раз, когда я их обновил. В основном я вычисляю новую позицию, основанную на времени начала и скорости перемещения, и записываю их в текущие переменные позиции, сохраняя при этом новое время начала. Как только это обновление будет завершено, я пройду через всех созданных существ, а также тех, у кого другая позиция, чем у последнего обновления. В суб-петле я снова провожу всех существ/клиентов, чтобы проверить, должен ли я уведомлять их о появляющемся существе (dis). На данный момент я запускаю это обновление каждые 100 мс.

Этот подход работает, но у меня есть ощущение, что это не лучший способ сделать это. И я не уверен, что произойдет, когда у меня будет несколько тысяч существ (игроков, монстров и т. Д.) В мире, которые нужно обновить и проверить.

Поскольку я не мог найти ресурсы по этой конкретной проблеме, я спрашиваю здесь. Подходит ли этот подход? У меня скоро возникнут проблемы? Каков стандарт для этого? Каков наилучший способ?

ответ

0

Возможно, вы захотите использовать quadtrees, чтобы разделить игровой мир на разделы на основе областей, которые могут видеть персонажи игроков. Тогда вам не нужно постоянно перебирать каждое существо в игре; вам нужно всего лишь перебрать те, которые находятся в секции, в которой находится персонаж игрока, и любые смежные в случае, если что-то пересекло границу.

Я сам не делал такого рода кодирование, но я работал с кем-то, кто сделал это в космической боевой игре, для которой я разрабатывал графический интерфейс!

Смежные вопросы