Я разрабатываю игру с большой квадратной 2-й игровой площадкой. Игровая зона без трюмов с ограниченными сторонами (без обертывания). Я пытаюсь выяснить, как я могу лучше всего разделить этот мир, чтобы повысить эффективность обнаружения столкновений. Вместо того, чтобы проверять каждый объект для столкновения со всеми другими объектами, я хочу только проверять близлежащие объекты для предотвращения столкновений и препятствий.
У меня есть несколько особых проблем для этого игрового мира...
-
Я хочу иметь возможность использовать большое количество объектов в игровом мире сразу. Однако,% сущностей не будет сталкиваться с объектами того же типа. Например, снаряды не будут сталкиваться с другими снарядами.
-
Я хочу иметь возможность использовать большой диапазон размеров сущностей. Я хочу, чтобы между наименьшими сущностями и самым большим была разница между большими размерами.
-
В игровом мире очень мало статических или не движущихся объектов.
Мне интересно использовать что-то похожее на то, что описано в ответе здесь: Quadtree vs Red-Black tree для игры на С++?
Мое беспокойство заключается в том, насколько хорошо дерево дерева может обрабатывать большие различия в размерах сущностей? Чтобы разделить мир на более мелкие сущности, более крупные должны будут занимать большое количество регионов, и меня беспокоит, как это повлияет на производительность системы.
Другая серьезная проблема заключается в том, как правильно обновлять список занятых районов. Поскольку существует много движущихся объектов и некоторые очень большие, кажется, что разделение мира приведет к значительным накладным расходам для отслеживания того, какие объекты занимают регионы.
Я в основном ищу любые хорошие алгоритмы или идеи, которые помогут уменьшить число обнаружений столкновения и предотвращения препятствий.