プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
中継地点自動設定機能02
開発中のミニマップ画面
これまで遠距離の目的地は指定不可とされていたが、経路探索の高速化により、遠距離の目的地も指定可能となった。



◎概要説明

前回に引き続き、各武将が中継地点を自動的に判断する機能を実装します。
始めに、アルゴリズムの概要を説明しておきましょう。


目的地が同一エリアor隣接エリアの場合は、目的地へ直接向かいます。目的地が遠方エリアの場合は、隣接エリアの区都を移動中継地点として設定します。

1 エリア単位で部隊移動経路を探索する

2 経路数が3以上(遠方エリア)か判定する
  →trueの場合、以下の処理を行う
  →falseの場合、中継地点は不要

3 2番目の経路(=隣接エリア)の区都を
  中継地点として設定する


参考:経路数と目的地の関係

 1  :同一エリア
 2  :隣接エリア
 3以上:遠方エリア



◎移動可否判定の改修

最初に流用方式でエリア経路探索プログラムを作成し、次に各エッジのコストデータを適当に設定しました。そして、ミニマップ画面で目的地を指定した際に行う移動可否判定を、以下のように改修しました。

1 エリア経路探索を行い、指定された地点が
  遠方エリアか判定する

2 探索開始座標を以下の条件として、詳細経路探索を行う
  →非遠方エリア:対象部隊の現在座標
  →遠方エリア:指定エリアの区都座標

3 詳細経路探索が成功すれば移動可、
  失敗すれば移動不可

改修して動かすと、移動可否判定は成功したように見えました。しかし1で算出されたエリア経路を確認すると、わざわざ遠回りするケースがありました。これはどういうことでしょうか?



◎遠回りする原因

最初はプログラムを疑ったのですが、なかなか問題点が見付かりません。う~ん…ひょっとして、データが悪いのか?

エリア経路探索もエースター方式ですが、ヒューリスティク関数は、ノードとゴールを結ぶ直線の長さを返しています。これに対し、各エッジのコストデータがヒューリスティク関数を下回ることがあります。これはエースターの前提条件に反するので、これが原因と考えました。

…しかしデータを修正しても、現象は変わりませんでした。
ガーン!!


こんな感じであれこれ悩みまくったのですが、結局以下の要因でヒューリスティック関数の値がおかしいことが原因でした。

・拠点データの開始番号は(0ではなく)1としていた

・メインマップ座標をエリアマップ解像度に変換してない

・エリアデータは斜め1コストとして算出したのに、
 ヒューリスティック関数内では直線距離を算出していた
 (斜め1.4コスト)



◎目的地指定画面の改善

というわけで、ようやく正常なエリア経路が作成できました。

中継地点自動設定機能02

目的地指定画面は(遠距離を含む)全域が指定可能となり、移動可否判定のレスポンスは大幅に向上しました(概ね0~2秒)。


しかし(川に挟まれた地域など)一部の地点を指定すると、10秒ぐらい待たされることがあり、その間ゲームがフリーズしてしまうので、後日さらなる対策を考えます。

…マップデザインを変更して、移動不可地域を無くしてしまうとか(笑)



◎部隊移動処理の改修

このゲームには「発令してから伝令が到着するまで時間がかかる」というルールがあります。そのため、伝令到着までの間に部隊が移動している可能性があります。なので、発令時に移動可否判定で算出した移動経路を、部隊にそのままセットすることはできません。

そんなわけで、伝令が到着した後、目的地への移動経路を改めて探索する必要があります。

従来の詳細探索処理の前にエリア探索処理を加え、遠方エリアの場合は2番目の経路(=隣接エリア)の区都を中継地点として設定します。

中継地点自動設定機能01

実装して1つの部隊を遠方に移動させると、隣接エリア拠点への経路を瞬間的に算出し、移動を開始しました。そして隣接エリア拠点に到着すると一旦入城し、すぐに出場して次の目的地へ向かい、最後は最終目的地に到着しました。

しかし複数の部隊を動かすと、最初に指示した部隊は最初の中継地点まで移動し、その後停止。他の部隊は全く動きません。うーむ…(ー_ー;



◎デバッグ

部隊が中継拠点に一旦入城→再出場する際に、部隊のZ座標を加算して南側に出していたのですが、再出場先が川になる拠点がありました。これが原因で1つの部隊が移動不可になると、他の部隊も連鎖的に移動不可となりました。

そんなわけで、出場時の座標修正はやめて、部隊経路定期探索処理に移動不可チェックを追加し、移動不可時は座標等をコンソール出力するよう改修しました。


その後も動作テストを繰り返すと、特定の拠点に駐留できず部隊が停止するケースがありました。

メインマップのテクスチャは微妙に歪んでいるので、見た目に合わせて拠点の配置場所をずらしました(昔の処置)。それをすっかり忘れていたので、目的の拠点がメインマップ座標では移動不可となるケースが発生したのに、気付けませんでした(汗)



◎テクスチャ再取得

昔のツールを修正しながら、テクスチャの再取得を試みました。しかしテクスチャの上下左右が(隙間や歪みなく)ピタリ一致する正射影行列を作成することが難しく、1日がかりでようやく隙間の無いテクスチャが完成しました。

MainMap000_OLD   MainMap000_New

これはメインマップの一番左上のテクスチャです。
従来は上端に隙間がありました(左図)。
新版は隙間が無くなりました(右図)。

これを適用して動かすと…あれ?まだズレてるような…??



◎次回予告

以前は(遠距離の経路探索が遅すぎて)ゲームとしてまともに遊べないレベルだったのですが、エリア経路探索/詳細経路探索の2段階に分けたことで、何とか遊べるレベルになりましたw

それにしても、問題やバグが次々と出て来るのは勘弁して欲しいです。…いや、悪いのは自分なんですけどね(汗)

次回は、テクスチャと座標のズレを修正し、中継地点自動設定機能がきちんと動くか確認します。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。