シードフィルアルゴリズムでナビグラフのデータをつくる(その1)
- 作者: Mat Buckland,松田晃一
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/09/28
- メディア: 大型本
- 購入: 8人 クリック: 262回
- この商品を含むブログ (43件) を見る
この本、すごくおすすめです。
私はCocos2d-xでゲームアプリを作っています。Cocos2d-xというのは描画やサウンドといったゲーム開発に必須な要素を担うフレームワークですが、肝心のゲームロジックの部分は自分でちゃんと書かなきゃいけません。そのゲームロジックに関するプログラミングのヒントがぎゅっと濃縮されています。
私もこの本で学習をしていたのですが、経路探索に使うナビグラフの情報が入ったマップファイルの作成は本書の中では.exeファイルで提供されていて、ソースコードはありませんでした。ですので今回はそのマップファイルを作るプログラムをつくってみました。
ソースコードはこちらです。ソースコードの一部は上の本から拝借しております。
https://github.com/kondroid00/MapEditorSample
(cocos2d-x v3.4でiPhone6(実機)でのみ動作確認をしております。)
シードフィルアルゴリズムというのを使います。ペイントソフトで色塗りをする際によく使われているそうです。とりあえずプログラムの動作を見てみましょう。
ノード=点、エッジ=ノードとノードを結ぶ線と思ってください。
起動するとRPGの城の中のようなマップが現れます。
画面をタップするとそこをシード(種)として周囲に一定間隔でノードができていきます。その際に新しい点が壁を突き抜けることはありません。
ノードが作成されなくなったらこんどはノードを中心にして周りにエッジができていきます。すべてできればプログラムの動作は完了です。
画面を下にスワイプすると下のような中に数字が入った円のようなものが現れます。(逆に上にスワイプすると隠れます。)
円の中をタッチしたままにすると円が赤くなります。その状態で時計回りになぞると数字が大きくなり、反時計回りにすると数字が小さくなります。実はこの数字はノード間の距離を表しています。円の少し上にある骨みたいなのが実際の距離です。
他に、画面を長押しすると画面に描かれたすべてのノードとエッジが消えます。
上のアプリを使うとシードフィルアルゴリズムの動きと生成されたナビグラフがどんなものかがなんとなくつかめますでしょうか?で、このナビグラフ一体なにに使うんでしょうか?主にはキャラクターを壁に衝突させずにある地点からある地点に移動させるのに使います。しかも最短で。エッジを辿っていけばまず壁にはぶつからないですし、どれくらい移動しなきゃいけないかもすぐにわかりますよね。
次回はプログラムの中身に入っていきます。
追記
その2を書きました。
新作アプリ作りました↓↓