我想调整Astar算法找到的路径,因此使用此路径的对象可以对变化做出适当的反应(例如目标移动)。我也尝试尽可能高效地完成这项工作,如果可能的话,不要重新计算整个路径。
路径指控看起来有些熟悉:
class Astar
{
void findPath(std::vector<Node> &path)
{
std::vector<Node> open;
std::vector<Node> closed;
//find path
}
}
class Foo
{
std::vector<Node> path;
Astar astar;
void findPath()
{
astar.findPath(path);
}
}
我考虑通过在对象移动时在当前路径的末尾添加新的std::vector<Node> path
来修饰路径Node
。然而,这将是有问题的,因为如果目标正在关闭,则修改的路径将需要在他旁边移动,移动到旧目标的位置然后开始向后移动到新位置。或者我想到每5-10次移动重新计算路径。有更好的方法吗?
答案 0 :(得分:1)
此类问题的标准方法是navmeshes,其中包含大量预先计算的信息以快速更新。有关详细信息,请参阅示例here。
关于星际导航on the gamedev stackexchange还有许多有用的问题。