11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2304|回复: 0
上一主题 下一主题

[2D 物理引擎] 【9RIA—ladeng6666】—【Box2D系列教程 10】创建圆角刚体

[复制链接] TA的其它主题
发表于 2018-2-5 16:31:23 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

转载:9RIA游戏开发者社区(天地会)
作者:ladeng6666(拉登大叔)
作者博客:http://www.ladeng6666.com/blog/


【Box2D系列教程-导航帖】—拉登大叔出品(总贴)



上次我们讨论了如何创建一个多边形刚体,终于摆脱了简单的矩形和圆形,又上了一个台阶。

这不,刚学会走,有人就想跑了。天地会的xiaopang125同学前两天问我如何创建一个圆角刚体,我用创建多边形刚体教程里的组合法实现了这个效果:
点击舞台任意位置,创建圆角刚体



[Actionscript3] 纯文本查看 复制代码
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"一节,给圆形刚体穿上上衣。

下载:
OK 2012-07-03 创建圆角刚体.rar (254.7 KB, 下载次数: 0)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表