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 alumican_net     bentomorio bentomorio     bkzen bkzen     clockmaker clockmaker     dkgkAs dkgkAs

k3lab k3lab     kazy kazy     keno42 keno42     ll_koba_ll ll_koba_ll     madflash madflash

muta244 muta244     naoto5959 naoto5959     nutsu nutsu     paq paq     quqjp quqjp

Saqoosha Saqoosha     soundkitchen soundkitchen     tail_y tail_y     tkinjo tkinjo     ton ton uwi uwi

HTML5飯