快速业务通道

Box2D入门基础之二

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

ClickBox2DNew.swf: 前一篇中主要是程序自动随机创建物体,现在加入鼠标事件,在鼠标单击地面时产生随机物体。具体代码如下: package
{
importBox2D.Collision.Shapes.*;
importBox2D.Collision.*;
importBox2D.Common.*;
importBox2D.Common.Math.*;
importBox2D.Dynamics.*;

importFlash.display.Sprite;
importflash.display.StageScaleMode;
importflash.display.StageAlign;
importflash.events.Event;
importflash.events.MouseEvent;
/**
*...
*@authorywxgood
*Blog:http://space.flash8.net/space/?628770
*/
[SWF(backgroundColor="0x333333",width="550",height="400",frameRate="30")]
publicclassClickBox2DNewextendsSprite
{
privatevarworld:b2World;
privatevarphysScale:Number=30.0;
privatevarm_timeStep:Number=1.0/30.0;
privatevarm_iteration:int=10;

privatevarbody:b2Body;
privatevarbodyDef:b2BodyDef;
privatevarboxShape:b2PolygonDef;
privatevarcircleShape:b2CircleDef;

publicfunctionClickBox2DNew()
{
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode=StageScaleMode.NO_SCALE;
init();
}

privatefunctioninit():void
{
addEventListener(Event.ENTER_FRAME,onFrame);
addEventListener(MouseEvent.MOUSE_DOWN,onDown);

varworldAABB:b2AABB=newb2AABB();
worldAABB.lowerBound.Set(-100.0,-100.0);
worldAABB.upperBound.Set(100.0,100.0);
vargravity:b2Vec2=newb2Vec2(0.0,10.0);
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);
createBox(Math.random()*250+100,Math.random()*150+100,Math.random()*360,Math.random()*50,Math.random()*50,true);

}

privatefunctiononFrame(e:Event):void
{
world.Step(m_timeStep,m_iteration);
for(varb:b2Body=world.m_bodyList;b;b=b.m_next)
{
if(b.m_userDataisSprite)
{
b.m_userData.x=b.GetPosition().x*physScale;
b.m_userData.y=b.GetPosition().y*physScale;
b.m_userData.rotation=b.GetAngle()*180/Math.PI;
}
}
}

privatefunctiononDown(e:MouseEvent):void
{

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);
}
}

privatefunctioncreateCircle(xPos:Number,yPos:Number,radius:Number):void
{
circleShape=newb2CircleDef();
circleShape.density=7;
circleShape.friction=0.3;
circleShape.restitution=0.4;
circleShape.radius=radius/physScale;
bodyDef=newb2BodyDef();
bodyDef.userData=newBall(radius,0xffffff*Math.random());
//bodyDef.userData.width=radius*2;
//bodyDef.userData.height=radius*2;
bodyDef.position.Set(xPos/physScale,yPos/physScale);
body=world.CreateBody(bodyDef);
body.CreateShape(ci

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号