APEのAPEngine

  • 2008 年 5月 14 日
  • kosuke

APEは物理計算のシュミレーションができる汎用クラスです。


2PXトップページのビリヤードを作った時に使ったのですが、サンプルやマニュアル参照に中途半端な理解のままなので、しっかりと理解しておきたく暇を見て自分なりにまとめてみます。

FLiNTの時同様、試す&中見るで追っていくので解釈の間違っているところがあるかもしれない。その点はご了承を。あくまで自分用です。参考にするならflashrodさんの記事が解りやすいです。

物理シュミレーションの汎用クラスは、

APE
BOX2D
Fisix
Revive

等が有名そうで、
後発のBOX2Dが注目を集めているように感じます。
APEはこの中では一番低機能かもしれない。

で、FisixとBOX2Dが気になるのだけれどなぁ。
オーバースペックに感じるし、多機能ぷりが実際のところ使いこなせるかどうか。
どれも決め手に欠ける中でAPEを選んだ理由は、

・シンプルさが個人的に好み。
・シンプルなら流用しやすそう。壮大なシュミレーションを作るとか思えないし。
・APEの前進にFladeというAS2のクラスがあり、AS2で制作を求められた際も共通する部分がありそう。
と思ったからです。

ではAPEngineクラスから追ってみる。

サンプル

This movie requires Flash Player 10.0.0

 

・プロパティ

■constraintCollisionCycles:int
step()を1回実行した時、バネと粒子に基づいてシュミレーションする回数です。
・デフォルトで1が設定されます。

■constraintCycles:int
step()を1回実行した時、バネに基づいてシュミレーションする回数です。
・デフォルトで0が設定されます。

■container : DisplayObjectContainer
粒子の描画対象を設定します。

■damping : Number
シュミレーション毎に発生する抵抗を設定します。
用途は空気摩擦をシュミレーションしたり、無重力にしたりとかかな。
・通常0〜1で設定します。
・0だと抵抗がMAXで動かない。1だと抵抗が無い。1以上だと加速していくよう。

 

・メソッド

■addForce(v:Vector)
粒子すべてに影響する力。粒子の重さを考慮するので風や流れをシュミレートする場合に使うよう。
v:Vector = 力の方向ベクトル。

■addGroup(g:Group)
グループを追加します。
APEngineに追加しないグループは、エンジンを動かしてもシュミレーションしてくれない。
g:Group = 追加するグループ。

■addMasslessForce(v:Vector)
粒子すべてに影響する力。粒子の重さに影響しない重力をシュミレートする場合に使うよう。
v:Vector = 力の方向ベクトル。

■init(dt:Number = 0.25)
APEngineを初期化します。
当然なようですが、dampingとかaddForceとかaddGroupで設定した値も初期化される。
dt:Number = シュミレーション毎に変化させる量。
・この値の二乗毎に計算している模様です。
・大きくすると(そうでなくてもありえる)薄い壁に衝突しないで突き抜けたりする。

■paint()
グループに登録されている、各粒子を描きます。
逆に考えると描かないでシュミレーション結果の値だけを使うってことも。

■step()
シュミレーションを実行します。
実際にシュミレーションをする時は、タイマー等で繰り返し、step()を実行して計算。paint()を実行して描画に反映という流れです。

“APEのAPEngine” に コメントはありません

コメントをどうぞ