Java 如何在Box2D中获得车身的扭矩?
我正在用Box2D制作一个LibGDX游戏。我有一辆车,当按下一个键时,后轮会得到一些额外的扭矩,以便加速。汽车通过接头与车轮相连Java 如何在Box2D中获得车身的扭矩?,java,libgdx,box2d,Java,Libgdx,Box2d,我正在用Box2D制作一个LibGDX游戏。我有一辆车,当按下一个键时,后轮会得到一些额外的扭矩,以便加速。汽车通过接头与车轮相连 public void handleInput(){ if(Gdx.input.isKeyPressed(Input.Keys.D)){ wheelBody.applyTorque(-100f, true); //Add torque when 'D' is pressed } } 但是如果你在车在空中的时候按这个键,扭矩就会变大。
public void handleInput(){
if(Gdx.input.isKeyPressed(Input.Keys.D)){
wheelBody.applyTorque(-100f, true); //Add torque when 'D' is pressed
}
}
但是如果你在车在空中的时候按这个键,扭矩就会变大。当车轮触地时,汽车就会向前发动。我可以通过使用MAX_TORQUE
值来避免这种情况。扭矩只有在低于最大扭矩时才会增加
但我如何“测量”车轮上当前的扭矩?我没有找到wheelBody.getTorque()
函数。或者还有其他解决方案吗?我想你不会喜欢下面的答案(我不喜欢)。我不知道有什么更好的方法来处理这一点,而不是修改C++的BOX2D源代码和与之接口的java源代码。
说明:
查看Box2D源代码,车身上的扭矩存储在其m_扭矩
成员变量中。通过调用JavaapplyTorque
方法,该变量会递增。同时,m_-torque
变量没有公共途径获取其当前值。当我最初试图回答你的问题时,我惊讶地发现(即,确认你已经发现了什么)
该变量的唯一用途是在Box2D的孤岛解算器代码中,用于增加身体的角速度。它直接由b2Island
类使用,该类是b2Body
类的朋友类
解决问题#1
OTOH调用world step方法,默认情况下调用world clear forces方法。这反过来会将所有实体的扭矩重置回0。这意味着给定步骤后的扭矩可以通过该步骤的增量时间、物体的转动惯量和物体的角速度来确定。所有这些都可以通过公共方法访问
根据这些可访问的值计算扭矩值可能通过以下数学方法实现:torque=I*w/h
(其中,I
是通过获取质量数据方法访问的物体的转动惯量,w
是通过获取角速度方法访问的角速度,h
是阶跃的时间增量)。这假设物体的角阻尼设置为零(默认情况下为零).但这对我来说似乎很难看,至少比我的第二个解决方案更难看
解决方案#2
我处理缺少扭矩吸收器的方法是,手动跟踪我在世界步之间施加在身体上的总扭矩,然后咬紧牙关使用该值
如果您需要,您可以在body的用户数据字段中跟踪此总和值,如果您尚未将其用于其他用途。当然,还有其他方法可以跟踪它,但在我看来,没有一种方法是有效的