Я делаю 2D игру со множеством движущихся объектов.Я уже реализовал камеру, которая может перемещаться и рисовать объекты в представлении.Теперь проблема заключается в том, что мне нужно проверить каждый объект, находится ли он в прямоугольнике моего вида, прежде чем рисовать его (O ( n ) операций, где n - количество объектовв моем Мире).Я хотел бы более эффективный способ получить все объекты в представлении, поэтому мне нужно только нарисовать их.
Я знаю несколько структур данных, которые могут достичь O (log n + k ) время запроса для двумерного запроса диапазона, где k - количество объектов в диапазоне.Проблема в том, что все объекты постоянно движутся.Время обновления большинства структур данных также равно O (log n ).Это довольно плохо, потому что почти все объекты движутся, поэтому все придется обновлять, что приводит к операциям O ( n log n ).В моей текущей реализации (все просто хранится в списке), время обновления занимает O ( n ) операций, чтобы обновить все.
Я думаю, что эта проблема уже должна быть решена, но я не мог действительно найти решение, которое конкретно рассматривает мои варианты.Большинство примеров 2D-камер просто делают это так, как я сейчас.
Так что мой вопрос в основном состоит из двух вещей:
- Есть ли более эффективный способ сделать это, чем мойтекущий (в целом)?
- Есть ли более эффективный способ сделать это, чем мой текущий (в XNA)?
С одной стороны, я думаю, O ( n ) + O ( n ) лучше, чем O (log n ) + O ( n log n ), но с другой стороны я знаю, что во многих играх они используют все эти структуры данных, такие как BSP и т. д. Поэтому я чувствую, что мне не хватает какой-то части головоломки.
PS: Я немного запутался, стоит ли мне публиковать это на переполнении стека, обмене стека разработчиков игр или обмене стека теории компьютерных наук ...... Так что извините, если это немного не такОбъем.