在box2d中,如何在保持所有动量,角度,位置等的同时延伸/收缩连接到身体的关节?

时间:2012-11-28 14:30:01

标签: box2d physics 2d-games

请参见图表:

swing diagram

在box2D中,我试图想出一种方法,我可以将一个旋转臂连接到蓝色方框,并使枢轴臂伸展或收缩。

蓝色框设置为使用棱柱接头左右移动,作为轨道/轨道。当蓝色框左右移动时,动量会使摆臂摆动。我的工作正常。

我的问题是,我无法可靠地想到一种方法可以将摇篮底部的绿色框上下移动。如果玩家按下,我想要它,以便底部的绿色框将向上移动摆臂。如果玩家停止向上按压,则底部的绿色框将停止并保持在摆臂的任何位置。我想这样做但保持摆臂的动力。

我只会在蓝框和底部绿框之间渲染一条线,所以看起来它正在延伸或收缩。

我尝试了棱柱关节和距离关节,但是当我为关节设定新的限制或距离时,它没有流体运动。关节不够僵硬。例如,当缩短棱柱关节时,我无法弄清楚如何在新关节长度的末端重新定位底部绿色框,但仍保持其先前的动量和旋转。

任何想法?

1 个答案:

答案 0 :(得分:-1)

如果没有看到你已经完成的工作,我很难给你代码。但问题的解决方案是使用......数学。

计算摆锤摆动的速度实际上是well-known problem。 “时期”是钟摆完成一次倒车摆动所需的时间,而控制钟摆速度的等式是:

T = 2*PI*sqrt(L/g)    where "L" is the length of the pendulum

因此,如果您可以通过这种方式对问题进行参数化,那么当用户移动绿色框“向上”将减少L并且振荡周期(T)将会下降,因此钟摆会加快。

作为旁注,如果你想让蓝色框能够移动,那么你所拥有的被称为compound pendulum,你的摆锤振荡周期的等式将被修改为:

T = 2*PI*sqrt(I/mgR)    where "R" is the adjusted length of the pendulum

我是盒子的惯性矩,等于:

I = (m/6) * h^2         where h is the length of one side of the blue box