У меня есть босс-враг, который ищет игрока, используя алгоритм A *. Это довольно сложная среда, и я делаю это во Flash, поэтому поиск может быть немного медленным, когда он ищет на больших расстояниях. Если бы плеер был неподвижен, я мог бы искать только один раз, но в данный момент я ищу каждый кадр. Это занимает достаточно много времени, чтобы моя частота кадров страдала.
Каково обычное решение этого? Есть ли способ «перепланировать» A *, не повторяя весь поиск? Должен ли я просто искать чуть реже (каждые полсекунды или секунды) и признавать, что на пути будет небольшая неточность?
источник
Вы можете использовать обнаружение близости, чтобы запускать алгоритм каждые несколько кадров, если расстояние очень велико (потому что в большинстве случаев, если расстояние большое, целевой путь не будет резко меняться от кадра к кадру). Например:
Это предполагает, что есть расстояние, на котором при выполнении A * каждый кадр имеет производительность, которая все еще приемлема. Короче, я бы пошел на ваш второй вариант. Особенно, если то, что у вас есть, работает, я бы не стал реализовывать что-то еще, если бы я мог просто уменьшить то, что работает хорошо. Суть в том, что вам придется попробовать его, чтобы увидеть, работает ли он для вашей игры.
источник
Не совсем отвечая на ваш точный вопрос, но ... если вы хотите «обмануть», вы можете заставить игрока оставить «сухари» и заставить босса следовать за ними. Если путь крошек пересекает сам себя, следуйте по самому последнему пути (это заставляет босса избегать петель и других путей, которые могут быть слишком длинными, не говоря уже о том, что они не следуют точному пути игрока)
Это будет хорошо работать, если босс - это какое-то животное с хорошим обонянием. Это будет очень похоже на следование запаху игрока :)
источник
Ваш случай - это почти то, что было изобретено HPA * . Однако, если это кажется излишним, я бы подумал, что поиск пути каждые полсекунды или около того должен работать очень хорошо.
источник
Если это статическая среда, то вы можете заранее рассчитать кратчайший путь для всех пар.
источник
Я создал игру для соревнования на 48 игр, где персонаж A * следует за игроком на уровне. Поскольку моя реализация A * была медленной (она не могла запускать каждый кадр), я установил интервал с задержкой в три секунды. Это привело к непреднамеренному результату, позволив игроку на несколько минут «обмануть» ИИ. Это на самом деле сделало игру веселее.
Позже я улучшил производительность реализации A * и попытался запустить ее на каждом кадре. Игра перестала быть веселой, потому что враг всегда будет отлично искать игрока.
Это было неожиданным и хорошим опытом обучения.
источник
Если вы абсолютно не хотите (или не нуждаетесь) использовать A *, вы также можете взглянуть на поведение рулевого управления . Поскольку нет полного планирования пути для каждого задействованного кадра, он должен быть намного легче при обработке.
источник