В моей 2D игре у меня есть статические и динамические объекты.Там может быть несколько камер.Моя проблема: Определить объекты, которые пересекаются с текущим прямоугольником обзора камеры.
В настоящее время я просто перебираю все существующие объекты (не заботясь о том, динамические или статические) и выполняю проверку AABB с помощьюкамеры смотрят прямо на них.Это кажется приемлемым для очень динамичных объектов, но не для статических объектов, где их может быть десятки тысяч (геометрия статического уровня разбросана по всей сцене).
Я рассмотрел несколько структур данных, которые могли бы решитьмоя проблема:
Это было первое, что я рассмотрел, однако проблема в том, что это заставило бы мои сцены иметь фиксированный размер.(Приемлемо для статических, но не для динамических объектов)
Кажется хорошим, но накладные расходы на перебалансировку кажутся слишком большими для многих динамических объектов.
Основная проблема для меня заключалась в том, что если вы сильно уменьшаете изображение с камеры, огромное количество в основном несуществующих пространственных блоков хешак запросу, приводящему к низкой производительности.
В общем, мои критерии для хорошего решения этой проблемы:
Динамический размер:Решение не должно приводить к ограничению размера сцены или требовать значительных пересчетов для изменения размера
Хорошая производительность запросов (для камеры)
Хорошоподдержка очень динамичных объектов: вычисления, необходимые для обработки объектов с постоянно меняющейся позицией, должны быть хорошими:
Максимальное допустимое количество динамических объектов в моей игре за один раз, вероятно, составляет 5000.ConsiВсе они меняют свою позицию каждый кадр.Есть ли даже структура данных, которая может быть быстрее, учитывая частые вставки и удаления, чем сравнивать AABB объектов с камерой каждый кадр?