创建圆形Box2D边界

作者: ladeng6666 分类: Box2D 发布时间: 2012-07-07 05:41 阅读: 18,846

让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity一节中,来自天地会sxl001问道如何创建圆形的边界(Round Boundary),好吧,我用这个教程来回答他。

实际上Box2D中没有专门创建圆弧的API (b2CircleDef创建的是实体圆形不是圆弧),所以试图寻找这样一个API的同学就放弃吧。结束了?坑爹啊!

哈哈,既然没有圆弧API,我就想其他的方法嘛。还记得Box2D多边形刚体的创建方法嘛?我们可以利用组合法,把多个形状组合起来形成一个这你的形状,当然也可以包括圆弧,下面的图可以更好的解释这一点。

图中我用12个线段组合起来模拟一个圆形,当然你可以用24个、36个线段等等。线段数越多,圆形就越标准,同时也越消耗CPU,所以能模拟出圆形效果就可以了,不用追求完美。现在,你应该有思路了吧:

  1. 定义线段的个数,12、24、36随你便,但不要太多。
  2. for循环遍历创建线段,根据线段索引i和圆形边界半径radius计算线段的坐标、角度
  3. 利用Box2D多边形刚体的组合法在线段的坐标位置创建与之角度相同的矩形刚体

效果如下,点击舞台任意位置,创建刚体:

我在下面的代码中做了详细的注释并highlight,我就不再讲解了,大家看代码吧!

 源代码下载

下一节,我将回答天地会wkyjoey的问题

拜读了拉登大神的教程受益匪浅,http://www.4399.com/flash/13250.htm,想知道这种随意的不规则刚体怎么做

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

4条评论
  • sxl001

    2012 年 11 月 29 日 上午 10:59

    感谢,朋友

    1. kanon

      2013 年 3 月 6 日 上午 10:37

      感觉 segmentlength 应该等于 Math.PI * 2 * radius / segmentNum,周长除以线段的个数。

      1. ladeng6666

        2013 年 3 月 6 日 下午 6:30

        这样也是可以的,anyway,只要计算出来就可以!

  • canapé d'angle

    2013 年 5 月 1 日 上午 12:28

    Really good job. Highly recommended.

发表评论

电子邮件地址不会被公开。 必填项已用*标注