プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
エースター法による移動経路実装04
開発中のメイン画面
マップ全域に80部隊を分散配置し動作テストを行った。中央(黄矢印)に向けて最短経路で移動している。



◎遠距離対応

今回はまず遠距離対応の改修を行います。と言っても、多分配列の上限を上げるだけで動くと思いますが、問題は上限を幾つにすべきか?

マップは256×256だから理論上の最大値は65536かもしれませんが、現実問題としてこれはありえません。では幾つぐらいが妥当でしょうか?

…いや待てよ?よく考えたら、経路探索後に配列を毎回初期化して経路数分確保すれば済む話では?

…くだらない問題でお騒がせしました(汗)



◎測定

遠距離対応の改修及び動作テストは良好でした。残る問題はパフォーマンスなので、パターンを変えて所要時間を測定しました。

エースター法による移動経路実装04

条件:
 80部隊をランダムに配置し、中央に移動させる

結果:
 100×100(面積比:1/25) 経路探索=1~2s 移動中=60fps
 250×250(面積比:1/4) 経路探索=15~20s 移動中=60fps
 500×500(面積比:1/1) 経路探索=70~80s 移動中=60fps




◎分析と考察(経路探索)

経路探索の所要時間は面積比に比例するようです。今回は集合場所が中央なので、端から端まで対角線に指定するとさらに時間がかかりそうですが、そのような操作は通常行わないので、今回の条件で十分と思います。

500×500で80部隊80sということは、平均すると1部隊1秒ですね。但し移動距離は最長でも端から中央までですし、ランダム配置なので平均的に考えると「マップ全体の1/4程度の距離を1部隊移動させる経路探索に約1秒かかる」ということです。

1秒というのは微妙な時間ですが、

・1度に複数部隊の経路探索が行われないよう
 ゲームデザインを工夫する

・経路探索中画面がフリーズしないよう気を配る

上記の方向で回避したいと考えています。

…でもやっぱりフリーズしちゃうかな?この点に関しては後で検証します。



◎分析と考察(移動処理)

今回は前回よりも動作が軽く、60fpsをキープしました。前回は裏で何か(WindowsUpdate等?)が動いていたのかもしれません。

もう少し詳しく説明すると、Update()が0.3msで、負荷の大半はdraw()によるものです。広面積の方が早く(10ms)、中央に部隊が集中すると遅く(15ms)なります。これはネームプレート描画負荷の影響によるものと思われます。(遠くの部隊はネームプレートが表示されないので負荷が軽い)

経路移動処理はUpdateなので、これをさらに早くしても殆ど意味がありません。というわけで、(経路関連の)移動処理パフォーマンスは現状でOKと判定します。


余談ですが、ネームプレートはXNA標準のスプライトバッチで実装しているので、全ネームプレート(文字入り)を画像に落としてインスタンシングで一括描画すれば、パフォーマンスが改善出来ると思います。
(今の所実施予定はありませんw)



◎動作テスト

経路探索中に画面がフリーズしないか動作テストを行います。

条件:
・各部隊がランダムで指定した拠点に移動する
・目標拠点に到着したら、他の拠点に移動する


プログラムは簡単に出来たのですが、開始から小一時間待っても動きません。中断して詳しく調べると、経路探索中のクローズリストにノードが5万件以上溜まってました(爆)

もしかしたら、拠点が移動不可の場所に存在し、移動不可の判定を出すまで全経路を探索しているのかもしれません。(注:拠点の配置場所と地形種別はまだマッチングしてません)

拠点番号を固定して確認すると、移動不可の判定を返すまで3分ほどかかる様子。
80部隊×3分=240分(約4時間)
…そんなに待てないよ!(^^;


移動可能な拠点番号を指定した場合は、ある場所に部隊が集合します。でも、集合場所に拠点が存在しません。何か変ですね(?_?)

…ああそうか!
拠点のposには、マップ座標ではなくオリジナルの緯度経度情報を格納したのを忘れてました!

移動不可が多い原因はコレだったんですね(^^;



◎拠点間の移動

プログラムを修正すると、部隊が拠点間を移動するようになりました。

エースター法による移動経路実装05

部隊が目標の拠点に到着すると、次の目標拠点をランダムで選択し移動を再開します。狙い通りの動きになりましたが、懸案も見えてきました。


懸案A:
 初期経路探索時にフリーズする(約3分)

懸案B:
 次の経路を探索する際にフリーズすることがある(約1秒)

懸案C:
 拠点の座標と表示位置が少しずれている

懸案D:
 移動不可の拠点が存在する(少数)

懸案E:
 移動不可時の処理未実装

懸案F:
 部隊任務との連携は未検証

懸案Aは、シナリオ初期データを工夫して、初期目標を中~近距離に制限すれば多少緩和できます。懸案C~Fは今後の課題です。

問題は懸案Bで、画面が一瞬静止状態となるので、プレイヤーに過度のストレスを与えてしまいます。しかしこれを改善するのはかなり難しそうです(--;



◎次回予告

今回は、拠点間を最短経路で移動させることが出来ました。

次回は、懸案Bの対処方法について検討します。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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