2Dパスファインディング-滑らかなパスを見つける


10

単純なパスファインディングを実装しようとしましたが、結果は、私が達成しようとしたものよりも満足できるものではありません。スタークラフト2のようなゲームのユニットはすべての方向に移動しますが、私の場合、ユニットは最大8方向(ウォークラフト1スタイル)にしか移動しません。 。Starcraft 2のように結果を得るにはどうすればよいですか?タイルサイズを縮小しますか?

http://i.stack.imgur.com/lr19c.jpg

写真では、障害物である岩のタイルの水平線と、緑のタイルとしてマークされた検出されたパスを確認できます。赤い線は私が達成したい道です。


まだ実装する時間はありませんが、私はジャンプポイント検索の大ファンです。しかし、ドキュメントは面白く、パフォーマンスは良好でした。

2
それがあなたの望みの道だと確信していますか?それを使用するユニットは壁を部分的に通過します。私はそれを別の例でより見やすくしました:i.imgur.com/eh4ZR.pngそして、あなたが本当に本当に達成したいことはここにあります:i.imgur.com/vFQg4.png
Markus von Broady

私の道には欠陥がありましたが、それは説明目的のためのものでした。調査するためのより良い方法を指摘してくれてありがとう。
Kooi Nam Ng

必要なものを取得するには、タイル内に小数座標が必要です。これがないと考えられる経路は機能しません。分数を運んでも表示しないと、ユニットは直線/対角線/直線/対角線に移動します。
Loren Pechtel

@LorenPechtelあなたは間違っています、あなたはそれを見つけた後、パスを滑らかにすることができます。ユニットの寸法に基づいて2つの線を作成し、それらがtile0とtileNの間のタイルと交差するかどうかを確認するのは非常に簡単です。ここでtile1-tile(N-1)はパスから削除するタイルです。
Markus von Broady、2012年

回答:


8

優れたパスファインディングアルゴリズムの場合、A *の使用はおそらく良い考えですが、洗練された、効率的な、または効果的なパス検索を必要としない単純なゲームの場合、単に方向を見つけることによってキャラクターをターゲットに向かって移動させるだけです。ターゲットは十分でなければなりません。

あなたができることは、頂点から「可視性グラフ」(各点から他のどの点が見えるか)を生成し、それからグラフ上でA *を実行することです。これは、最短経路が常に可視性グラフ上にあるため機能します。

タイルサイズを縮小すると役立つ場合があります。

資源

参考文献

編集: @MarkusvonBroadyのコメントが好きです。

「実際には、パスを平滑化することであり、見つけることではありません。画像で見つかったパスは問題ありません。」

資源

@MarkusvonBroadyから

私は検索をしました、以下を見つけてください(それらはあなたを助けるかもしれません)


1
すばらしいリンク、私からの+1
lhk

2
@ MarkusvonBroady、-1をありがとう。私はあなたから学んだ。ポイントは欲しくないので、正しいものを学び、共有したいと思っています。議論することで、正しいものを見つけることができると信じています。:)
Md Mahbubur Ra​​hman 2012

@MarkusvonBroady、パス平滑化アルゴリズムのいくつかのリソースを共有していただけませんか?
Md Mahbubur Ra​​hman

実際、この答えはOPに役立つと思います。OPが実際のスムージング(スプライン補間など)を求めていたとは思わないが、彼のアルゴリズムは現在、恐ろしく非最適なパスを見つけており、直線に「スムージング」する必要がある。追加のスムージングがなければ、どのA *が自然に彼のために見つけたでしょう。
Sean Middleditch

A *を使用していて、最適なパスを見つけたと思います。
Kooi Nam Ng

0

生経路の一端から始めて、言うpath[0]あなたが削除することができ、path[1]セグメントはの点を結ぶことによって形成場合path[0]path[2]任意の壁交差しません。最後のセグメントまでさらに進むと、より単純なパスが提供されます。

これにより、パスがスムーズになるだけでなく、火の例など、直線の3つの連続したセグメントなどの不要なポイントも削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.