Box2D创建圆角刚体
上次我们讨论了如何创建一个多边形刚体,终于摆脱了简单的矩形和圆形,又上了一个台阶。
这不,刚学会走,有人就想跑了。天地会的xiaopang125同学前两天问我如何创建一个圆角刚体,我用创建多边形刚体教程里的组合法实现了这个效果:
点击舞台任意位置,创建圆角刚体
代码除了下面创建圆角刚体的函数之外,与创建多边形刚体里的基本一致。下面的代码我已经做了详细的注释,就不再赘述了。
private function createRoundBody(posX:Number,posY:Number,width:Number,height:Number,radius:Number):void { //1.创建刚体需求b2BodyDef var bodyRequest:b2BodyDef = new b2BodyDef(); bodyRequest.position.Set(posX / 30, posY / 30);//记得米和像素的转换关系 //2.Box2D世界工厂更具需求创建createBody()生产刚体 body=world.CreateBody(bodyRequest); //3.创建敢提形状需求b2ShapeDef的子类 /* 详细说明我们的需求 创建多个b2Shape需求 然后b2Body刚体工厂根据需求createShape生产形状 */ //把像素转换成Box2D里的米 var b2Width:Number = width / 2 / 30; var b2height:Number = height / 2 / 30; var b2Radius:Number = radius / 2 / 30; var offsetX:Number = b2Width - b2Radius; var offsetY:Number = b2height - b2Radius; //------------------------------------ // 首先创建两个矩形,我分别把它们高和宽减去了radius,留给圆角用,你可以注释掉下面创建圆角的代码,看看效果 var shapeRequest:b2PolygonDef = new b2PolygonDef(); shapeRequest.density = 3; shapeRequest.friction = 0.3; shapeRequest.restitution = 0.2; //创建两个矩形 shapeRequest.SetAsOrientedBox(b2Width, b2height - b2Radius); body.CreateShape(shapeRequest); shapeRequest.SetAsOrientedBox(b2Width - b2Radius, b2height); body.CreateShape(shapeRequest); //------------------------------------ // 然后,分别在四个角上创建四个圆形,实现圆角效果 var circleRequest:b2CircleDef = new b2CircleDef(); circleRequest.density = 3; circleRequest.friction = 0.3; circleRequest.restitution = 0.3; circleRequest.radius = b2Radius; circleRequest.localPosition = new b2Vec2(-offsetX, -offsetY); body.CreateShape(circleRequest); circleRequest.localPosition = new b2Vec2(offsetX, -offsetY); body.CreateShape(circleRequest); circleRequest.localPosition = new b2Vec2(-offsetX, offsetY); body.CreateShape(circleRequest); circleRequest.localPosition = new b2Vec2(offsetX, offsetY); body.CreateShape(circleRequest); body.SetMassFromShapes(); }
圆角效果实现了,接下来给我自己以及大家留个家庭作业,请参考”刚体的上衣——b2BodyDef.userData“一节,给圆形刚体穿上上衣。
联系作者
那天在天地会里给大神M了下,结果大神立刻答应写了demo~~真是太感谢啦~
客气了,记得完成我留的作业哦!!
这样是不是会造成上一篇说的问题。一个图形由6个组成,增加了消耗
其实,还好,”屈指可数”的刚体对性能的影响,是感觉不出来的。
拉家登舍的博主?你的切割box2d刚体系列我很受益,在此感谢一下!
是的,谢谢你一直以来的关注!
我应该可以用这个方法生成一个卵形刚体。我试试。
哦 不行,那我中间的不能是矩形,得是等腰梯形