2013年9月アーカイブ

どうも あ〜る です。

前回、障害物を配置したことにより
敵がただ直線的に動くと障害物に引っかかって
進めなくなってしまうので
今回はそれを解消するための移動ルーチンを考えます。

基本的な考え方は、マップがチップ単位になっているので
チップの中央を通過しながら、障害物のない上下左右隣のチップに
移動していけば障害物にぶつからずにすむというものでしょう。

でもただ闇雲にランダムに進む先を決めていると
目標地点までたどり着くのに時間がかかりすぎます。

なので、現在地チップから目的地チップまでの
最短経路を求めて、それに沿って進むということを考えました。

そこで、前回の再起呼び出しのルーチンを応用して、
現在地からの距離マップを作ればいいかと思ったのですが
これだとどうも具合が悪そうです。

例えば、こんな再帰処理にすると...

enemy_routine_1.png

どこまで繰り返してもまだ短いルートの検索が
残っているかもしれないので、
全てのケースを処理しなければなりません。
これはさすがに馬鹿っぽいですね...。
この説明だけだと分かりにくそうなので、例えば
下の図のようなケースを考えれば分かるでしょう。

enemy_routine_2.png

開始地が緑で目的地がオレンジとすると、
再帰呼び出しの順序により、上ルート、下ルート、左ルート
の順序で左隣のチップのチェックが行われます。
(説明のために他のルートをはしょっています。)
そうすると、この下ルートでたどり着いた時は
すでに埋められている距離よりも長く、
左ルートでたどり着いた時は短くなります。
どのタイミングで調べたルートが最短かは
その時点では分からないので、
全ルート探索が必要になってしまうということになります。

ということで、再帰呼び出しでの処理はせず
こんな風に考えました。

enemy_routine_3.png

目的地はオレンジのチップであるとします。
まず、調べなければならない先端部分(図の赤いチップ)を配列に登録します。
登録されたチップについて、
・距離マップに距離を登録
・上下左右のチップが進入可能かつすでに距離が登録されていないなら
 次の先端部分として配列に登録
という処理をします。
そしてこれを目的チップに到達するまで繰り返します。
最後に目的地から距離が1ずつ小さくなる隣接チップを
たどって戻ればルートが完成します。

最後の図で距離が埋められていないところは
目的地までの距離が確定しており、
もう調べる必要はないので打ち切りです。
目的地への最短ルートは2通りありますが
どっちでもいいので、目的地から最初に見つかった
距離4のチップへのルートをたどっていきます。
これであれば無駄なくルートが調べられそうですね。

ということで、コーディングしてきますー。

遅れている開発を取り戻すために、部屋に引きこもったのは良いんですが、環境整備に手間取ってしまってほとんど進捗が出なかった050(れごお)です.

れごおと書くと、単語の区切り目がわからなくなるので050なんて書いてみました.

さて、折角落とし穴に落ちたのでblogに足跡を残しておこうと思います.

【初期のモチベーション】

・ 開発機材がmac book しか無いけどクレヨラさんとの作業連携上、windowsのツールが必要

・ 具体的には、「MOD TOOL」→ ${*.fbx} →「(自作)コンバーター」→${アプリで利用するモデルデータ}といった手順から、「(自作)コンバーター」はwindows/mac ともに利用できるコマンドラインツールが欲しい

【目論み】

・ VMWare fusion 6 をインストールして、windows 環境を構築

・ 仮想環境上のwindowsに、Visual Studio をインストールしてwindows Application の開発を行う

【はまったことと、対応】

1. VMWare fusion を手に入れるために、chrome を立ち上げたらネットが激しく重いので調査

  → 調査の結果、使っているルーターがボトルネックになっている事が判明

  → 今後の対策にファームウェアの更新

2. 以前、VMWare fusion 4 のライセンスを act2 から購入していたのでupgradeをしようと思ったが、act2がVMWare fusion の取り扱いをやめてしまったので、ライセンスのアップデートが行えない

  → 本家のVMWare(http://www.vmware.com/jp/)にプロダクトキーの再登録を行うことで可能になる

 

3. (ここが本題)VMWare fusion 6 が「予期せぬ不具合」となり起動できない.

  → VMWare fusion 4 の設定が悪さをしていると予測して、アンインストールを試すがやはり起動しない...

  → 色々と試しているうちに、なにかおかしなことをやってしまったようでmacの調子が悪くなる...

  → timemachine から復元

  → 復元後、今度は VMWare fusion 4 をアンインストールしてから 6 を起動してみるがやはり「予期せぬ不具合」で起動できない...

 

【解決】

VMWare fusion 6 のサポートページをたどっていたら、解決方法がでていました.

(http://kb.vmware.com/selfservice/documentLinkInt.do?micrositeID=null&externalID=2058900)

Finder(or shell)から「Library/Preferences/VMware\ Fusion/license.fusion.site.6.0.*」を探して削除すると無事起動するようになりました.

 

【はまったこと】

VMWare fusion のアンインストール手順(一般的な mac アプリケーションのアンインストール手順と読み替えても良いと思うけど...)として、

1. アプリケーションフォルダにある、アンインストール対象のアプリをゴミ箱へ

  (ここでは、"/Application/VMWare\ fusion.app" かな)

2. ユーザのホームディレクトリにある"~/Library/Caches/" の中から対象アプリが作成したキャッシュを削除

  (ここでは、"com.vmware.fusion"以下が該当するはず)

3. ユーザのホームディレクトリにある"~/Library/Preferences/" の中から対象アプリが作成した設定ファイルを削除

  (ここでは、"~/Library/Preference/com.vmware.fusion*" が該当するはず)

4. "~/Library/Preference/VMware\ fusion" を削除

5. ルートディレクトリにある"/Library/Preferences" の中から対象アプリが作成した設定ファイルを削除

こんな感じにアンインストールを行うと思う.

VMware fusion は、なぜかこの手順でアンインストールをしても、すべてのデータがアンインストールされるわけではなく、ライセンス情報がどこかに残ってしまっているらしい.

(キーチェーンとかなのかな?)

「設定ファイルなんかは再利用しなくてもいいや」とばかりに、VMware 関連のファイルを削除したから大丈夫だろうなんて考えたのがハマリの原因だったようですね.

VMware のサポートページに書かれている、

Library/Preferences/VMware\ Fusion/license.fusion.site.6.0.*」

このファイル*だけ*を削除して起動する必要があったようです.

 

、、、はぁ、変なところに無駄な時間をつかってしまったよ.

明日は、がんばってツールの実装を進めたいと思います

 

どうも あ〜る です。

久しぶりに、日本橋 改め あるたおるた(仮)のお話。
今回は障害物の配置についてです。
以前、障害物を配置すると敵から逃げやすくなるというような事を
書いたと思います。
じゃあ、実際どうやって配置するか?について考察してみました。

まず前提として、あるたおるたのフィールドはチップという単位で区切られています。
このチップ単位に障害物を配置します。

とりあえずランダムに置けばいいか、と思いきや早速問題が。
フィールドが分断されてしまうと
絶対取得出来ないアイテムが出来てしまって
クリア不能になってしまいます。

なので、
 ・あるた と おるた の初期配置位置はつながっている
 ・アイテムは あるた と おるた の初期配置位置とつながっているチップにしか配置できない
 ・敵も同様につながっているチップにしか配置出来ない
という条件を満たす必要があります。

ここで念のため、「つながっているチップ」とは
障害物で分断されておらず、必ずいずれかのチップを通過しながら
移動可能なチップ同士のことを指します。

さて、では あるた もしくは おるた とつながっているチップを
全て列挙するにはどうしたらいいでしょうか。

下の図のように考えました。
あるた からつながる進入可能なチップを探索していくという方式です。

obstacle_1.png

まず、全てのチップを未判定という状態とします。
次に障害物のあるチップを進入不可としておきます。
あるた の初期配置チップからスタートして
上下左右を順に調べ、進入不可になったら、それ以上進めないですから探索を終了します。
範囲外の場合も探索終了です。
また、既に進入可,不可が決まっていればそのチップから先の状態はわかっているはずなので
探索を終了していいですね。
それ以外は、そのチップを中心に上下左右に探索を広げます。

そして最後に、おるた の初期配置チップが進入不可なら、
またランダムに障害物を配置しなおして判定をやりなおします。
あるた から順に進入可のチップをたどっているので、
進入可のチップ同士はつながっています。
ですので、おるた のチップが進入可なら、あるた と おるた は
つながっているということになります。
あとは、進入可のチップにアイテムを配置すれば、
取得不可能なアイテムというのは発生しません。


次の図のように未判定の部分が残る場合がありますが、
探索終了後も未判定の部分はつながっていないチップなので、
進入不可と考えればいいでしょう。

obstacle_2.png


次の図のように あるた と おるた が分断されていると
おるた のチップが未判定という状態で探索が終了するので
つながっていないと判定され、再度やり直しとなります。

obstacle_3.png


ここまでの考察で、不都合なく障害物を配置することができそうです。
ということで、これは...再帰呼び出しの例題のような......。
ではコーディングしてきますー。

どうも あ〜る です。

近所のスーパーで、あるたおるた公式ドリンクを発見しました!
drink.jpg

......えぇ本当は「おたる」ですがね。
スパークリングワインだけじゃなくて、赤も白もありました。
今度ケイプロの合宿の時にでも飲んでみます。

久しぶりの更新なのにこんなネタですんませんでした...。