2/9 Box2DFlashAS3 メモ2

   

Box2DFlashAS3

今日はこのサイトこのサイトを使ってさらにBox2DFlashAS3に関する認識を深めていきたいです。

まずは物理エンジンの設定

[cc lang=”actionscript”]
var worldAABB : b2AABB = new b2AABB();
world.lowerBound.Set(-100,-100);
world.upperBound.Set(100,100);

var gravity:b2Vec2 = new b2Vec2(0,9.8);

_world = new b2World(worldAABB,gravity,true);
[/cc]

b2AABBクラスをインスタンス化して、シミュレーションの範囲を作り、lowerBound.Set(左上の座標) , upperBound.Set(右下の座標)で設定している。
注意点はこの際の数値はPixelではなくM(メートル)で表示されています。これは後で適正な大きさに設定しています。

gravityは物理空間の重力を表しています。
b2Vec2は第一引数に水平位置、第二引数に垂直位置がしていできます。今回は重力ということで垂直位置にだけ値が(メートル)で設定されています。

b2Worldは物理空間を作っています。
第一引数は、b2AABBオブジェクト
第二引数は、シミュレーションに常時かかる力を表すb2Vec2オブジェクト
第三引数は、doSleepを有効にするかどうか。よほどのことが無い限りtrueにしておく。




物体の作成

固定された静体と、動ける動体とあるが基本作成方法は同じです。

まずは静体の作成。
[cc lang=”actionscript”]
var bdFloor:b2BodyDef = new b2BodyDef();
bdFloor.position.Set(5.5 / 2, 3);

var pdFloor:b2PolygonDef = new b2PolygonDef();
pdFloor.SetAsBox(2, 0.15);

var bFloor:b2Body = _world.CreateBody(bdFloor);
bFloor.CreateShape(pdFloor);
[/cc]

b2BodyDefを使い物体の位置を指定します。

b2SpriteDefを使い物体の形を指定します。
b2SpriteDefには、四角形を表すb2PolygonDefや、丸を表すb2CircleDefなどがあります。
b2PolygonDefの場合はSetAsBox()を使い範囲を設定します。
b2CircleDefの場合はradiusで半径をしていします。

最後にb2Bodyを使って、b2BodyDef、b2SpritDefを当てはめ物体を生成します。


続きまして動体を見てみましょう。
[cc lang=”actionscript”]
var bdBox:b2BodyDef = new b2BodyDef();
bdBox.position.Set(5.5 / 2, 1);

var pdBox:b2PolygonDef = new b2PolygonDef();
pdBox.SetAsBox(0.3, 0.2);
pdBox.density = 1; //密度(1平方メートルあたりの重量(kg))

_bBox = _world.CreateBody(bdBox);
_bBox.CreateShape(pdBox);

_bBox.SetMassFromShapes();
[/cc]

静体と同じようにb2BodyDef,b2SpriteDef,b2Bodyクラスを使っています。

違いは質量を設定している所です。
densityは物体の密度を表しています。SetMassFromShapes()を使って質量を有効にしています。

実際に画面に表示する
[cc lang=”actionscript”]

var dd:b2DebugDraw = new b2DebugDraw();
dd.m_sprite = this;
dd.m_drawScale = 100; //1m を100ピクセルにする
dd.m_fillAlpha = 0.3; //塗りのアルファ値
dd.SetFlags(b2DebugDraw.e_shapeBit); //物体を表示する設定に
_world.SetDebugDraw(dd); //物理ワールドにセット

//▼イベントリスナーの追加
addEventListener(Event.ENTER_FRAME, _enterFrameHandler);
}

//▼イベントリスナー定義
private function _enterFrameHandler(eventObj:Event):void {
_world.Step(1 / 24, 10);//物理シミュレーションの更新
}
[/cc]

b2DebugDrawクラスを使って作成した物体を画面に表示していきます。
イベントリスナーではStep()を使って物理的な動きを適切に処理しています。
第一引数は更新する時間(秒)を表す数値
第二引数は精度を表す整数値。




Related Posts Plugin for WordPress, Blogger...