Box2d弹性物体的制作



这次我们来使用Box2d框架制作具有一定弹性的物体。这里我们说的弹性物体,不是指物体碰撞到其他物体后反弹的这种特性,而是指物体的外形在受到外力作用的时候会发生形变,比如我们小时候玩儿的弹力球。那么这里就有一个有意思的地方,我们知道在Box2d中,所有的物体都是“刚体”,刚体就是不会发生弹性形变的物体,那么不是矛盾了么?所以这里我们所得具有弹性的物体,实际上并不是一个物体,而是一系列刚体组成的一个物体。

好了,不多说废话了,下面就开始制作。

我们先看一下运行的效果截图:


我们要制作的就是这种具有一定弹性的环形物体(或者说球状物体)。

原理比较简单,我们可以看到,图中的环形物体实际上是由很多个小的梯形连接组成的,相邻的两个梯形物体通过关节进行连接,如下图所示:


相邻的两个梯形物体具有两个相邻的顶点,这两个顶点都使用具有固定作用的关节进行连接才能使两个物体形成一定的弹力效果,假如上图中我们去掉上面或者下面的关节,那么只有一个关节存在的时候,可以想象整个环形物体就会像下面这样松垮掉:


说道“具有固定作用的关节”,我指的就是能够将两个关节上的两个点固定在一起的关节,例如b2RevoluteJoint,b2WeldJoint,b2DistanceJoint。我们利用相邻的物体要脱离关节的约束时关节产生的反作用力,来体现出弹性的效果。

既然上面的三种约束都有固定的作用,我们分别试一下看看有什么效果。首先来看b2DistanceJoint的效果:


截图中我们看到下落的时候还好(其实在运行的时候,下落过程每个梯形物体都会发生剧烈抖动,感觉整个环要散开的样子),下落到地面后,就坍塌在了一起。这个现象其实比较容易理解,虽然b2DistanceJoint限制了两个相邻的梯形的相邻顶点的距离,但是并没有对彼此有任何自由度(旋转,平移)的限制,因此在发生抖动的时候,就没有任何规律最后塌陷在一起的时候,两边的梯形同时也产生了折叠的效果(折叠之后依然满足距离的限制)。

接着我们再来看b2WeldJoint:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值