2017-08-21 6 views
0

Astarアルゴリズムで見つかったパスを適応したいので、このパスを使っているオブジェクトが変更(例えばターゲットが動き回る)に適切に反応できるようにします。私は可能な限り全パスを再計算することなく、可能な限り効率的にこれを実行しようとします。私は、オブジェクトの移動に伴って、現在のパスの末尾にNode新しいを追加することで、パスstd::vector<Node> pathをmodyfingについて考えアダプティブパス - 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); 
    } 
} 

パスaccusitionはと幾分smiliar見えます。しかし、ターゲットが閉じると、変更されたパスが彼の隣に移動し、古いターゲットの位置に移動し、新しい位置に向かって後方に移動する必要があるため、これは問題になります。あるいは、私は約5-10回の移動がパスを再計算することを考えました。これを行うより良い方法はありますか?

答えて

1

この種の問題の標準的なアプローチは、ナビゲーションを高速化するために事前計算された多くの情報を含むnavmeshesです。詳細については、例えば​​を参照してください。

また、スターの航海に関する多くの有益な質問がありますon the gamedev stackexchange

関連する問題