Box2DFlash Hello World(Box2D动力学基础研究)

这是Box2DFlash引擎的一个基础入门,掌握了这个,基本上就可以入门应用了。关键是清楚Box2DFlash的结构!
[b]【[url]http://www.newflash3d.com[/url]---flash3D先锋队:北京贝武易科技公司】[/b]
有疑问请联系我QQ:363596350
运行结果如下。

[flash=640,360]/upload/attachment/131295/79fc0c04-0c51-3c1d-8492-35f9f659c5b2.jpg[/flash]

源码:

package{

import flash.display.Sprite;
import flash.events.Event;
// Classes used in this example
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;

[SWF(width="640", height="360", backgroundColor="#000000", frameRate="30")]

public class HelloWorld extends Sprite{

[Embed(source='assets/PhysBox.swf')]
public var PhysBox:Class;
//public var FGmc:MovieClip = new FG as MovieClip;

[Embed(source='assets/PhysCircle.swf')]
public var PhysCircle:Class;

[Embed(source='assets/PhysGround.swf')]
public var PhysGround:Class;

public function HelloWorld(){



// Add event for main loop
addEventListener(Event.ENTER_FRAME, Update, false, 0, true);



// Creat world AABB
var worldAABB:b2AABB = new b2AABB();
worldAABB.lowerBound.Set(-100.0, -100.0);
worldAABB.upperBound.Set(100.0, 100.0);

// Define the gravity vector
var gravity:b2Vec2 = new b2Vec2(0.0, 10.0);

// Allow bodies to sleep
var doSleep:Boolean = true;

// Construct a world object
m_world = new b2World(worldAABB, gravity, doSleep);

// set debug draw
/*var dbgDraw:b2DebugDraw = new b2DebugDraw();
var dbgSprite:Sprite = new Sprite();
addChild(dbgSprite);
dbgDraw.m_sprite = dbgSprite;
dbgDraw.m_drawScale = 30.0;
dbgDraw.m_fillAlpha = 0.0;
dbgDraw.m_lineThickness = 1.0;
dbgDraw.m_drawFlags = 0xFFFFFFFF;
m_world.SetDebugDraw(dbgDraw);*/



// Vars used to create bodies
var body:b2Body;
var bodyDef:b2BodyDef;
var boxDef:b2PolygonDef;
var circleDef:b2CircleDef;



// Add ground body
bodyDef = new b2BodyDef();
//bodyDef.position.Set(15, 19);
bodyDef.position.Set(10, 12);
//bodyDef.angle = 0.1;
boxDef = new b2PolygonDef();
boxDef.SetAsBox(30, 3);
boxDef.friction = 0.3;
boxDef.density = 0; // static bodies require zero density
/*circleDef = new b2CircleDef();
circleDef.radius = 10;
circleDef.restitution = 0.2*/
// Add sprite to body userData
bodyDef.userData = new PhysGround();
//bodyDef.userData = new PhysCircle();
bodyDef.userData.width = 30 * 2 * 30;
bodyDef.userData.height = 30 * 2 * 3;
addChild(bodyDef.userData);
body = m_world.CreateBody(bodyDef);
body.CreateShape(boxDef);
//body.CreateShape(circleDef);
body.SetMassFromShapes();

// Add some objects
for (var i:int = 1; i < 10; i++){
bodyDef = new b2BodyDef();
bodyDef.position.x = Math.random() * 15 + 5;
bodyDef.position.y = Math.random() * 10;
var rX:Number = Math.random() + 0.5;
var rY:Number = Math.random() + 0.5;
// Box
if (Math.random() < 0.5){
boxDef = new b2PolygonDef();
boxDef.SetAsBox(rX, rY);
boxDef.density = 1.0;
boxDef.friction = 0.5;
boxDef.restitution = 0.2;
bodyDef.userData = new PhysBox();
bodyDef.userData.width = rX * 2 * 30;
bodyDef.userData.height = rY * 2 * 30;
body = m_world.CreateBody(bodyDef);
body.CreateShape(boxDef);
}
// Circle
else {
circleDef = new b2CircleDef();
circleDef.radius = rX;
circleDef.density = 1.0;
circleDef.friction = 0.5;
circleDef.restitution = 0.2
bodyDef.userData = new PhysCircle();
bodyDef.userData.width = rX * 2 * 30;
bodyDef.userData.height = rX * 2 * 30;
body = m_world.CreateBody(bodyDef);
body.CreateShape(circleDef);
}
body.SetMassFromShapes();
addChild(bodyDef.userData);
}

}

public function Update(e:Event):void{

m_world.Step(m_timeStep, m_iterations);

// Go through body list and update sprite positions/rotations
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 * 30;
bb.m_userData.y = bb.GetPosition().y * 30;
bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
}
}

}

public var m_world:b2World;
public var m_iterations:int = 10;
public var m_timeStep:Number = 1.0/30.0;

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值