Я пытаюсь создать игру защиты башни в Javascript.Mass astar pathfinding
Это все идет хорошо кроме первопрохождения ..
Я использую код AStar с этого сайта: http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript который использует бинарную кучу (который я считаю довольно оптимальным)
Проблема я Я хочу, чтобы люди блокировали путь «нападавших». Это означает, что каждый «атакующий» должен иметь возможность самостоятельно найти выход на выходе (поскольку кто-то может просто отключить одного «атакующего», и ему нужно будет найти свой путь к выходу). Теперь 5/6 злоумышленников могут обращаться в любой момент без проблем. Но скажите, что путь заблокирован для 10 + атакующих, все 10 из них должны будут запускать свой сценарий поиска пути одновременно, что просто уменьшает FPS примерно до 1/2 в секунду.
Это должно быть распространенной проблемой для тех, у кого есть много сущностей, которые ищут путь в любое время, поэтому я думаю, что должен быть лучший способ, чем мой подход.
Итак, мой вопрос: какой лучший способ реализовать алгоритм многоцелевого поиска для нескольких «ботов» наиболее эффективным способом.
Спасибо,
Джеймс
похоже 'findGraphNode' в этом коде занимает линейное время, в то время как оно должно принимать постоянное время (с хэш-таблицей), так что реализация далеко не оптимальна. –
Я посмотрю, смогу ли я немного ускорить его. Но я думаю, что даже при более эффективном поиске пути я все равно окажусь медленными кадрами, если попытаюсь найти путь к ботам. Я начинаю думать, что мой лучший выбор - это на самом деле поиск всей карты один раз за кадр, а затем установление направления на каждом проходимом блоке для последующих ботов. – james
@james, если это что-то вроде большинства защиты башни, с примерно экраном карты и без сложных сражений (т.е. боты не сталкиваются друг с другом или с другими движущимися объектами, или вы справляетесь с этим отдельно), тогда да, я думаю, что расчет путей для всей карты был бы лучше всего.На самом деле вам, вероятно, даже не придется пересчитывать всю карту в каждом кадре. Если вы будете осторожны при построении алгоритма, вы сможете определить, на какие узлы влияет изменение пользователя, и пересчитать только «вверх по течению» от этих узлов. Звучит интересно! – Tim