b2BodyをTweenerでコントロール

予測がつかない動きもBox2Dの楽しいところなんだけど、ある程度コントロールしたいところも出てきたりする。

たぶんいろんなアプローチがあるんだと思うけど、ライブラリソース見てもいまいち理解できなかったので、b2Bodyのメソッド、SetXForm()を利用してTweenerで動かす方法を考えてみた。

b2Bodyを継承したmyBodyというオブジェクトを、現在地から右方向へ1(Box2Dの世界換算で)トゥイーンしたい、とした時

var nPotision:b2Vec2 = myBody.GetPosition();
myBody.WakeUP();
Tweener.addTween(nPotision, { x:nPotision+1, time:1, onUpdateParams:[myBody],
				onUpdate:function( targetBody:b2Body ){ targetBody.SetXForm(this, 0); });

とする。

Tweenerの部分を整理すると

  1. まずnPotisionのプロパティ.xをトゥイーンするようにする。
  2. でその.xが更新される度に(onUpdate)、myBodyを引数にして(onUpdateParams)*1、SetXForm()が実行される*2

ちなみにfor(){}で囲っても動いたので、複数のオブジェクトを一斉にトゥイーンすることもできる。

*1:myBodyを引数にしているのは、こうしないとmyBodyを参照できないから。

*2:SetXForm(this, 0)のthisは、nPotision自身を指してる(0は角度の指定)。