【解決】最短経路探索を諦めた時の判定について

hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

【解決】最短経路探索を諦めた時の判定について

投稿記事by hadhad » 2016年11月03日(木) 22:04

お世話になります。

this.moveStraight(this.findDirectionTo(x,y))を移動ルートの指定にて設定すると、
最短経路探索を行ってその座標に向かってくれますよね。

しかし、Game_Character.prototype.searchLimitにて設定された距離よりも離れた所に目的地があると、
最短距離探索を諦めて普通に近づくだけになり、目的地までの間に壁があると、避けずにスタックしてしまいます。

そこで設定された各イベントごとに「最短距離探索を諦めたかどうか」を取得したいと思っています。

例えば用法としては、町のマップで住民たちが目的の家々にゆっくりと歩いて行くさい、
遠すぎて最短距離探索ができない場合はランダム移動をするようにしたいといった感じです。

どなたか、解決方法が分かりましたら教えてください。
宜しくお願い致します。
最後に編集したユーザー hadhad on 2016年11月08日(火) 04:29 [ 編集 3 回目 ]

hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

Re: 最短経路探索を諦めた時の判定について

投稿記事by hadhad » 2016年11月04日(金) 21:21

Twitterにて、
「壁にぶつかって止まっていたら、ランダム行動するのはどうか」
という案が浮かびましたが、それではAIの挙動が間抜けですので、
問題の通り、「壁にぶつかる前に探索経路を完遂できるか調べる」方法をお願いします。

画像
アバター
トリアコンタン
記事: 912
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 最短経路探索を諦めた時の判定について(追記あり)

投稿記事by トリアコンタン » 2016年11月04日(金) 22:51

findDirectionToでゴールに辿り着いた場合、グローバル変数「goaled」がtrueに設定されます。
これを利用して事前にgoaledをfalseに設定しておき、テスト実行後にgoaledの値を確認することで
最短経路の発見に成功したかどうかを判定できます。

実行例(イベントコマンドのスクリプトから実行する場合)

コード: 全て選択

goaled = false;
this.character(0).findDirectionTo(x, y);
console.log(goaled);


ただし、グローバル変数「goaled」は、いわゆるグローバル汚染を引き起こしており、バグではないが不適切な実装となっています。
今後の改修で人知れず修正される可能性は(極めて低いですが)ゼロではないので上記方法を採用する場合はご注意ください。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
トリアコンタン
記事: 912
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 最短経路探索を諦めた時の判定について(追記あり)

投稿記事by トリアコンタン » 2016年11月07日(月) 01:37

移動ルート設定のスクリプトから実行する場合のスクリプトを追記します。
指定したX座標、Y座標に到達可能な場合はそこに向かって移動し、できなかった場合はランダム移動します。

コード: 全て選択

goaled = false;
this._tempDirection = this.findDirectionTo(x, y);
goaled ? this.moveStraight(this._tempDirection) : this.moveRandom();
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
hadhad
記事: 20
登録日時: 2016年6月09日(木) 15:55

Re: 最短経路探索を諦めた時の判定について(追記あり)

投稿記事by hadhad » 2016年11月08日(火) 04:28

お見事です。
どちらもやってみて完璧に再現出来ました。
しかし、グローバル変数とはちょっと心配ですね。

ありがとうございました!

“MV:質問” へ戻る