この記事のURL

http://www.dango-itimi.com/blog/archives/2011/001085.html


FLASH tips update Box2DFlash v2.1a 調査6 : 斜面を登り切った後の平面移動と処理サイクル

斜面を並行移動するプレイヤー(操作可能な箱)が、斜面を登り切った後 繋がる平面に対し、スムーズな平面並行移動に遷移するサンプルを作成しました。斜面を登り切るタイミングで Y軸方向の移動ピクセル量を調節し、平面から浮かないような処理を加えています。

 http://www.dango-itimi.com/blog/swf/144/preloader.swf

斜面を下り終えた後に繋がる平面への並行移動遷移処理は、今回の処理とは別となるため恐らく次回となります。

斜面を登り切った後 どうすれば平面並行移動にスムーズに遷移できるのか、胃袋が痛くなるまで悩みましたが、Box2D上におけるピクセル移動処理の方法が判明したため今回のサンプルを作成できました。

その他 悩ましかった点は、プレイヤー位置や移動量を決定する b2Body.SetPosition, b2Body.ApplyImpulse, b2Body.SetLinearVelocity メソッドがそれぞれ適用されるタイミングはいつなのか、プレイヤー位置操作後 プレイヤーが衝突している物質を取得できるタイミングはいつなのか、についてです。

結論としては、1フレーム内に 以下の順序で処理を行うことにより、問題は解決しています。

(1)プレイヤー移動
b2Body.SetPosition, b2Body.ApplyImpulse, b2Body.SetLinearVelocity 等を実行

(2)b2World.Step メソッド実行

(3)衝突物質の判定
b2World.GetContactList メソッドからの衝突物質データの取得

(4)衝突判定
プレイヤーが衝突している物質が何であるかを判定し、次のフレームでプレイヤーがどの行動を取るのかを設定

プレイヤー位置を設定するメソッド実行後、b2World.Step メソッドにより プレイヤーの位置が確定し、確定された位置から衝突物質が何であるのか判定できるようになる、といったところでしょうか。誤っていたらごめんなさい。

[ FLASH ] [ tips ] [ update ] 投稿者 siratama : 2011年08月18日 17:47

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1045

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]