Vosegus Sakura

  1. Home
  2. Vosegus Labs
  3. AS3 の物理演算ライブラリを試してみる

AS3 の物理演算ライブラリを試してみる

Vosegus Labs

使用ライブラリ : AS3 Flash Physics Engine Box2DFlash

落下する箱

SWF

ActionScript

package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; import Box2D.Common.Math.*; public class Learning14 extends Sprite { public function Learning14() { stage.addEventListener(MouseEvent.MOUSE_DOWN, fall); //******************************** //Box2D //お金が降ってくる //******************************** //物理エンジンが影響する範囲を定義 var worldAABB:b2AABB = new b2AABB(); worldAABB.lowerBound.Set(-100, -100);//左上 worldAABB.upperBound.Set(100, 100);//右下 //重力を定義 var gravity:b2Vec2=new b2Vec2(0.0,10.0); //物理エンジンワールドを作成 var doSleep:Boolean=true; var m_world:b2World=new b2World(worldAABB,gravity,doSleep); //描画設定 var debugDraw:b2DebugDraw = new b2DebugDraw(); debugDraw.m_sprite=this; debugDraw.m_drawScale=100;// 1mを100ピクセルにする //画像のみの場合は消す debugDraw.m_fillAlpha=0.3;// 不透明度 debugDraw.m_lineThickness=1;// 線の太さ debugDraw.m_drawFlags=b2DebugDraw.e_shapeBit; //画像のみの場合は消す m_world.SetDebugDraw(debugDraw); //オブジェクト(床)を定義 var body:b2Body; var bodyDef:b2BodyDef = new b2BodyDef();//1.インスタンスを生成 bodyDef.position.Set(2.8, 3);//2.インスタンスの中心座標を設定 左からの位置,上からの位置 var bodyShapeDef:b2PolygonDef = new b2PolygonDef();//3.どんな形のオブジェクトを造るかを選択 bodyShapeDef.SetAsBox(2, 0.1);//4.幅/2 , 高さ/2 1 = 1メートル body=m_world.CreateBody(bodyDef);//6.物理エンジンワールドにインスタンスを追加 body.CreateShape(bodyShapeDef);//7.インスタンスにShape(多角形)を追加 //オブジェクト(札)を定義 var m_body:b2Body; var m_bodyDef:b2BodyDef = new b2BodyDef();//1.インスタンスを生成 m_bodyDef.position.Set(2.8, 0);//2.インスタンスの中心座標を設定 左からの位置,上からの位置 var m_bodyShapeDef:b2PolygonDef = new b2PolygonDef();//3.どんな形のオブジェクトを造るかを選択 m_bodyShapeDef.SetAsOrientedBox(0.38, 0.225, new b2Vec2(0, 0), 0);//幅/2 , 高さ/2 ,右に回す m_bodyShapeDef.density=1.0;//5.オブジェクトの質量を定義 m_bodyShapeDef.friction=0.5;//オブジェクトの摩擦を定義 m_bodyShapeDef.restitution=0.8;//オブジェクトの反発係数を定義 m_bodyDef.userData = new Movie();//userDataに画像を生成 m_bodyDef.userData.width=80; m_bodyDef.userData.height=45; m_body=m_world.CreateBody(m_bodyDef);//6.物理エンジンワールドにインスタンスを追加 m_body.CreateShape(m_bodyShapeDef);//7.インスタンスにShape(多角形)を追加 m_body.SetMassFromShapes();//8.重さを設定 //時間を動かす function fall(e:Event):void { addEventListener(Event.ENTER_FRAME, func, false, 0, true); } function func(e:Event):void { m_world.Step(1/24,10);//1フレーム1/24秒,シミュレーション精度 //セットしたuserDataの位置と回転をオブジェクトのそれらに合わせる for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) { if (bb.m_userData is Sprite) { //インスタンスの画像を中心にセットして bb.m_userData.x=bb.GetPosition().x*100;//userDataの横軸をオブジェクトの横軸に bb.m_userData.y=bb.GetPosition().y*100;//userDataの縦軸をオブジェクトの縦軸に bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);//userDataの回転をオブジェクトの回転に addChild(m_bodyDef.userData);//stageにuserDataを追加 } } } } } }

このページの上部へ