boids : 鳥の群れシミュレーション

boids

boids の実装です。ぼーっと見たり、ドラッグで集めたり散らしたりして楽しんでください。

http://dame.dyndns.org/misc/boids/ (windowsIEFirefox でしか動作確認していません)


boids (birdoids 、鳥もどき) とは 1986 年ごろ Craig Reynolds 氏が発表した鳥や魚の群れをシミュレーションする理論らしいです。参考サイト。要するに、

  • 仲間が近すぎる位置にいたら離れる
  • 周りの仲間と同じ方向を向いて飛ぶ
  • 周りの仲間の中心に近づく

という単純な 3 つのルールに従って鳥の群れをシミュレーションする感じ。


まあそんなことはどうでもよくて (?) 、これを作った真の目的は、swf と java applet の通信実験です。この boids は、表示は swf で、シミュレーションは java applet (下の方でちらちらしてるやつ) でやっています。この方法を使えば、swf よりはだいぶ速い java spplet で重い処理をこなし、すでにいろんなエフェクトが実装されている swf でインターフェイスを提供することができます *1 。最近の Flash 界隈は全然追っていないので、ひょっとしたらすでに知れ渡っている方法かもしれませんが、少なくともこれを実装した当時 (2005 年) はまだ誰もやってなかったと思います。


以下、通信方法のちょっとだけ具体的な説明。自分でもよく覚えてないので間違ってたらごめんなさい。ポイントは、javascript を介すことです。つまり、swf から javascript を叩き、javascript から applet を叩く感じ。
swf から javascript を叩くのは fscommand あたりでぐぐれば出てきます。javascript から swf を叩くのは、以下のようにすると swf 内の変数に代入ができるので、後は swf 側で変数の変化を観測すればいいです。

document.<swf を貼っている object 要素の id>.SetVariable('/:<ActionScript 内の変数名>', <文字列引数>);

javascript から java applet を叩くのは、以下で applet 内のメソッド呼び出しができます。メソッド呼び出しなので返値も取得できるはずです。

document.<class を貼っている applet 要素の id>.<public なメソッド名>(<引数>);

実際にはいろいろバッドノウハウがあった気がするのですが、よく覚えていません。詳しくはソースでも見てください。

*1:proce55ing だけでいいのかもしれませんが、私は使ったことないので知りません。