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 "一节, 给圆形刚体穿上上衣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值