無理な更新はお止めください。

ひたすらマイペースな人のブログ

シードフィルアルゴリズムでナビグラフのデータをつくる(その1)

 

実例で学ぶゲームAIプログラミング

実例で学ぶゲームAIプログラミング

 

この本、すごくおすすめです。

私はCocos2d-xでゲームアプリを作っています。Cocos2d-xというのは描画やサウンドといったゲーム開発に必須な要素を担うフレームワークですが、肝心のゲームロジックの部分は自分でちゃんと書かなきゃいけません。そのゲームロジックに関するプログラミングのヒントがぎゅっと濃縮されています。

私もこの本で学習をしていたのですが、経路探索に使うナビグラフの情報が入ったマップファイルの作成は本書の中では.exeファイルで提供されていて、ソースコードはありませんでした。ですので今回はそのマップファイルを作るプログラムをつくってみました。

ソースコードはこちらです。ソースコードの一部は上の本から拝借しております。
https://github.com/kondroid00/MapEditorSample
(cocos2d-x v3.4でiPhone6(実機)でのみ動作確認をしております。)

 

シードフィルアルゴリズムというのを使います。ペイントソフトで色塗りをする際によく使われているそうです。とりあえずプログラムの動作を見てみましょう。

ノード=点、エッジ=ノードとノードを結ぶ線と思ってください。

 

起動するとRPGの城の中のようなマップが現れます。

f:id:kondroid:20150407231854p:plain

 

 画面をタップするとそこをシード(種)として周囲に一定間隔でノードができていきます。その際に新しい点が壁を突き抜けることはありません。

f:id:kondroid:20150407231949p:plain

 

ノードが作成されなくなったらこんどはノードを中心にして周りにエッジができていきます。すべてできればプログラムの動作は完了です。

f:id:kondroid:20150407231942p:plain

 

画面を下にスワイプすると下のような中に数字が入った円のようなものが現れます。(逆に上にスワイプすると隠れます。)

f:id:kondroid:20150407231948p:plain

 

円の中をタッチしたままにすると円が赤くなります。その状態で時計回りになぞると数字が大きくなり、反時計回りにすると数字が小さくなります。実はこの数字はノード間の距離を表しています。円の少し上にある骨みたいなのが実際の距離です。

f:id:kondroid:20150407231954p:plain

 

他に、画面を長押しすると画面に描かれたすべてのノードとエッジが消えます。

 

上のアプリを使うとシードフィルアルゴリズムの動きと生成されたナビグラフがどんなものかがなんとなくつかめますでしょうか?で、このナビグラフ一体なにに使うんでしょうか?主にはキャラクターを壁に衝突させずにある地点からある地点に移動させるのに使います。しかも最短で。エッジを辿っていけばまず壁にはぶつからないですし、どれくらい移動しなきゃいけないかもすぐにわかりますよね。

次回はプログラムの中身に入っていきます。

 

追記

その2を書きました。

kondroid.hatenablog.com

 

 

新作アプリ作りました↓↓

kondroid.hatenablog.com