INFINITY TANK BATTLE
Concept
自分でActionScriptを書くことで、AIの動きや、戦車、弾のデザインを作っていくことが出来る タンク・ゲームです。wonderflに投稿されているコード同士を戦わせてみるというアイディアが形 となりました。
仕組み
ApplicationDomainを用いたランタイム・クラスの利用
ゲームのステージのクラスは、wonderflのユーザが書いたタンクを定義するTankクラスをドキュメントクラスとする2つのswfファイル、それぞれのタンクの弾の見た目を定義するBulletRendererクラスをドキュメントクラスとする2つのswfのファイルをロードし、それぞれをnewしてユーザの書いたコードをランタイムに実行します。

詳細はApplicationDomainのリファレンスに譲りますが、LoaderでSWFを読み込むとき、2番目の引数にLoaderContextを指定することが出来、
ldr.load(req, context);
ロード完了後に、
var c:Class = ldr.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; var m:* = new c();
とすることにより、ロードしたSWF内で定義されているクラスのインスタンスをランタイムに生成することが出来ます。
上のエントリは、下のエントリを読み込んで、下のエントリにあるメソッドを実行します。詳細はそれぞれのソース・コードをご覧下さい。
なお、wonderf内では、net.wonderfl.utils.ClassLoaderというクラスが提供されていて、上のエントリ内の ClassLoaderクラスをライブラリ向きに少しカスタムしたものです。このクラスを使うことで、上のコードは、 コチラのエントリにあるように簡潔に書くことができます。
ApplicationDomainを扱う上での注意点はコチラをご覧下さい。
Box2Dを利用した衝突判定
Box2Dについては過去にも取り上げましたが、非常に優秀なゲーム向け物理演算ライブラリとなっていますので、単なる物理シュミレータとしてだけではなく、より色んなタイプのゲームの動きや、弾等の衝突判定に使うことが可能となっています。特に衝突判定に関しては良く出来たロジックで書かれているので自前で実装するよりもBox2Dに任せた方が手軽かつ高速です。勿論、衝突判定そのものを実装すること自体も楽しみにはなりますが。
このようなBox2Dの使い方についても今後取り上げようと思いますが、かなりのボリュームとなりますので、また改めてご紹介しようと思います。
Credit
PG
大塚雅和
田中太陽
FD
小林太郎
DG
橋本淳史
山田敬美
Flashアドバイザー
日高一明
道家陽介
村井孝至
Dir
片岡巧
杉政英樹
βテスターの皆様(敬称略、wonderflのidアルファベット順)
alumican_net
bentomorio
bkzen
clockmaker
dkgkAs
k3lab
kazy
keno42
ll_koba_ll
madflash