Алгоритм закадрового индикатора противника - PullRequest
0 голосов
/ 08 июля 2011

Так что я использую Unity для этого, но я не уверен, что это имеет значение.

У меня есть враги, которые находятся за пределами видимого экрана, и я хотел бы иметь индикаторы на сторонена экране, чтобы обозначить, где они находятся.Это хорошо, но есть много врагов, поэтому я хочу сгруппировать их в капли.Например, вместо того, чтобы показывать 8 индикаторов друг над другом, я хочу 1 индикатор с (8) рядом с ним.

Итак, сейчас мой алгоритм:

  • минимальный диапазон блога - это константа, которую я устанавливаю
  • , перебирая всех врагов
    • проверять расстояние до всех врагов, уже назначенных для больших объектов, если в пределах досягаемости, назначать для больших объектов
    • , если нет, проверьте других неназначенных врагов, если таковые имеются в пределах диапазона капли, сделайте блоб

Я делаю это каждый кадр, и он кажется неэффективным.Что я могу сделать, чтобы улучшить это, а также сэкономить на обработке между кадрами.Например, что я мог бы сделать с данными предыдущего фрейма, чтобы сделать это лучше (поскольку вероятность изменения членов блоба очень мала, но у него определенно будет обновленная позиция).

Или, если мнепросто перестаньте беспокоиться об этом и продолжайте, потому что это просто векторная математика, и она не вызовет проблем в двигателе.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Построить сетку с низким разрешением, которая дает грубый обзор области. Назначьте каждого врага в соответствующем месте сетки (должно быть рассчитано напрямую). Показывать индикатор для каждого занятого местоположения сетки; локации с одним врагом получают индивидуальные индикаторы противника, локации с несколькими противниками получают групповые индикаторы.

На практике я бы ожидал, что разреженное представление будет иметь больше смысла, чем создание всей сетки.

Обратите внимание, что по сути та же самая идея используется при обнаружении столкновений.

ADDENDUM. Незначительная модификация может быть применима только для индикаторов направленного действия. Если у вас есть два врага в одном направлении, но на разных расстояниях, подход сетки приведет к двум индикаторам в одном направлении. Если это нежелательно, основывайте расчеты на направлении к врагу, разбивая круг на 360 градусов на грубые клинья, как круговая диаграмма с равными областями. Группируйте врагов, основываясь на том, к какому куску пирога они принадлежат.

1 голос
/ 08 июля 2011

Вы, вероятно, в порядке с тем, что у вас есть в настоящее время в отношении вычислительной мощности.

Существует интересный подход к проблеме группировки близости с использованием генетических алгоритмов: http://www.cbu.edu/engineering/maesc/maesc03/FullPapers/d3-1-doc.pdf

Кроме того, эти ссылки выглядят многообещающе: Вариант алгоритма K-означает с равным размером кластера

Но, честно говоря, я достаточно хорош в математике, чтобы действительно дать твердый ответ ...

...