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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: html和xml中的转义字符在as3中的用法浅析下一篇: Flash AS与XML数据交互
关于Box2D入门基础之二的所有评论