快速业务通道

Box2D入门基础之一

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-07

HelloBox2D.swf: 修改了Box2D提供的那个HelloWorld程序。具体如下: package
{
importBox2D.Collision.*;
importBox2D.Collision.Shapes.*;
importBox2D.Common.Math.*;
importBox2D.Common.*;
importBox2D.Dynamics.*;
importFlash.events.Event;

importflash.display.Sprite;
importflash.display.StageScaleMode;
importflash.events.Event;

/**
*...
*@authorywxgood
*Blog:http://space.flash8.net/space/?628770
*/
[SWF(backgroundColor="0x333333",width="550",height="400",frameRate="30")]
publicclassHelloBox2DextendsSprite
{
//定义一个边界盒,应尽量定义大一点
privatevarworldAABB:b2AABB;
//定义一个虚拟物理世界,所有物理模拟均运行于次虚拟世界
privatevarworld:b2World;
//定义比例,Box2D中是一米为长度单位,1m=30像素
privatevarrate:Number=30;

//步长与积分次数
privatevarm_timeStep:Number=1/rate;
privatevarm_iteration:int=10;

//出现物体的数目
privatevarnumWidget:int=10;

//承载刚体
privatevarbody:b2Body;
//刚体定义
privatevarbodyDef:b2BodyDef;
//方形物体定义
privatevarboxShape:b2PolygonDef;
//圆形物体定义
privatevarcircleShape:b2CircleDef;

publicfunctionHelloBox2D()
{
init();
}

privatefunctioninit():void
{
stage.scaleMode=StageScaleMode.NO_SCALE;

addEventListener(Event.ENTER_FRAME,onFrame);
//创建边界盒
worldAABB=newb2AABB();
worldAABB.lowerBound.Set(-100.0,-100.0);
worldAABB.upperBound.Set(100.0,100.0);
//重力加速度(300m/s^2)
vargravity:b2Vec2=newb2Vec2(0.0,10.0);
//当物体静止是是否处于休眠而节约cpu时间
varDosleep:Boolean=true;
//创建虚拟世界
world=newb2World(worldAABB,gravity,doSleep);

//创建地面
createBox(550/2,390,0,275,10,true);
//左右挡板
createBox(0,400/2,0,10,200,true);
createBox(550,400/2,0,10,200,true);
//障碍物
createBox(Math.random()*250+100,Math.random()*150+100,Math.random()*360,Math.random()*50,Math.random()*50,true);

for(vari:int=0;i<numWidget;i++)
{
vartempNum:Number=Math.random();
varhalfWidth:Number=10+Math.random()*50;
varhalfHeight:Number=10+Math.random()*50;
varxPos:Number=100+Math.random()*(stage.stageWidth-100);
varyPos:Number=0;
varradius:Number=10+Math.random()*30;
varangle:Number=Math.random()*360;
if(tempNum>.5)
{
//创建方形物体
createBox(xPos,yPos,angle,halfWidth,halfHeight,false);
}
else
{
//创建圆形物体
createCircle(xPos,yPos,radius);
}
}
}

privatefunctioncreateBox(xPos:Number,yPos:Number,angle:Number,halfWidth:Number,halfHeight:Number,isStatic:Boolean):void
{
boxShape=newb2PolygonDef();
if(isStatic)
{
boxShape.density=0.0;
}
else
{
boxShape.density=2.0;
}

boxShape.friction=0.3;
boxShape.restitution=0.3;
boxShape.SetAsBox(halfWidth/rate,halfHeight/rate);
bodyDef=newb2BodyDef();
bodyDef.angle=angle;
bodyDef.userData=newBox(halfWidth*2,halfHeight*2,0xffffff*Math.random());
bodyDef.position.Set(xPos/rate,yPos/rate);
body=world.CreateBody(bodyDef);
body.CreateShape(boxShape);
body.SetMassFromShapes();
addChild(bodyDef.userData);
}

privatefunctioncreateCircle(xPos:Number,yPos:Number,radius:Number):void
{
circleS

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号