2/14 Box2DFlashAS3 メモ3

Box2DFlashAS3

やる気の低下でさぼってましたが、「メディア芸術祭」を見てモチベーション新たに頑張っていきます。 Webで飯が食えるようにしたい。

重心の設定

前回のエントリーで物理空間の設定から動体、静体の作り方に関しては大体理解したつもりです。

  1. 物理空間の作成(b2AABBクラス、重力はb2Vec2クラス)
  2. 静体の作成。b2BodyDefクラス、b2SpriteDef(b2PolygonDef,b2CircleDefなど)クラスを使う
  3. 動体の作成。静体と同じようにb2BodyDef,b2SpriteDefを使う。動体の場合は密度(density)や反発関数(restitution)を設定する。SetMassFromShapes()を使い質量を設定する
  4. 描画する。b2DeBugDraw()を使う。

今回はその物体をどのように動かしていくかなどを、このサイトを参考にして勉強していきたいです。

重心の設定。 形が複雑な図形の場合重心がづれて自然の動きを表現することが難しい場合があります。 その際にはb2MassDataを使います。

また物体の慣性を加えるとより自然に見えます。 b2MassData.Iプロパティは「回転の慣性」を制御するプロパティです

[cc lang="actionscript"] var massData:b2MassData = new b2MassData(); massData.mass = bArrow.GetMass(); //重心を再設定 massData.center = new b2Vec2(0,0);  //新しい重心を決める massData.I = bArrow.GetInertia(); //b2MassData.Iプロパティは「回転の慣性」を制御するプロパティです _bArrow.SetMass(massData) //新しい重心をセット

[/cc]

物体に力を加える

b2BodyのメソッドSetLinearVelocity()で物体にかかる力を設定します。 物体に力を加える際にはApplympulse()を使います。 継続的に力を加える場合はApplyForce()を使います。 逆に原則の場合はlinearDamping()を使います。これはb2Bodyではなく、b2BodyDefで設定している。

[cc lang="actionscript"] b2Bobyl.SetLinearVelocity(new b2Vec2(5, 0)); b2Boby.ApplyImpulse(new b2Vec2(5, 0), b2Body.GetWorldCenter().Copy()); [/cc]

以前にも勉強したがb2Vec2は重力を表しています。b2Vec2(水平にかかる力、垂直にかかる力) 通常物理世界には重力としてb2Vec2(0,9.8);の力がかかっています。

ApplyImpluse()に関しては作用点を第二引数で設定できます。今回の例ではb2Bodyの中心を作用点にしています。 重心以外に設定をすると、物体に回転力が加わり回転をつけることができます。

物体に回転を加える

力を加えるように回転も加えることができます。

b2Body.SetAngularVelocity(1秒あたりの回転角度(ラジアン)を表す数値。)メソッド、 継続的に回転を加える場合はb2Body.ApplyTorque(物体に与える回転力を表す数値。)メソッドになります。

※スリープするしないがわかりにくいのでよう勉強する必要ありです。