В настоящее время я работаю над 2D-стрельбой по типу игры, и я использую квадровое дерево для обнаружения коллизий. Я написал рабочее квадратное дерево, которое правильно подталкивает моих актеров в узлы/листья, которыми они принадлежат в дереве. Однако у меня есть несколько проблем.QuadTree для обнаружения двумерных столкновений
Во-первых, как я на самом деле использую свой квадрант, чтобы выбрать, какие другие объекты должен испытывать объект? Я не уверен, как это делается.
Что вызывает второй вопрос. Скажем, у меня есть объект в узле, который не является соседом другого узла, но что объект достаточно велик, что он охватывает несколько узлов, как я могу проверить фактическое столкновение, так как я предполагаю, что дерево может считать, что это не достаточно близко, чтобы столкнуться с объектами в «удаленном» узле? Должны ли объекты, которые не полностью вписываются в узел, сохраняются в родительском узле?
В моей игре большинство объектов имеют разные размеры и перемещаются.
Я читал большое количество блогов/статей о квадрантах, но большинство из них просто объясняют, как построить дерево, которое на самом деле не то, что я ищу.
Любая помощь/информация приветствуется.
Если игра, которую вы делаете, действительно похожа на видео, которое вы связали, вам вообще не следует использовать пространственный индекс. Несортированный список объектов будет, вероятно, быстрее до нескольких сотен движущихся объектов. – SingleNegationElimination
Зависит от столкновения, я думаю ... возможно, для кругового столкновения, возможно, не для пиксельных. Кроме того, для небольшого количества объектов, ищущих соседей в 1D-отсортированном списке entites, обычно быстрее всего, IIRC. Но внедрение рабочего квадтрита стоит того, чтобы испытать настоящий опыт. (А также, bullet hell-trend shoot'em ups может иметь сотни движущихся объектов легко :)) – Kos