如何在特定物体上应用重力

问题描述:

将重力应用于物理世界非常简单,您只需创建一个Vector2并设置其水平和垂直重力值。如果我想创建一个零重力的自上而下的2D游戏,只将重力应用于特定的物体,就像箭头的抛射体运动一样。当然,如果你的世界首先具有重力,那么很容易有弹丸运动。如何在特定物体上应用重力

float GRAVITY_EARTH = -9.8f; 
Vector2 gravity = new Vector2(0, GRAVITY_EARTH); 
World world = new World(gravity, true); 

的Box2D体类有取消或反向重力的方法,但是我不想用的时候,就像在下面的代码示例。

body.setGravityScale(0); // set 0 to cancel the gravity, and set -1 to reverse the gravity 

但我想成为多才多艺,我只想将重力应用于特定的身体。例如,我使用方法setLinearVelocity将主体移动到特定目标。现在,如果世界的重力γ为-9.8f,它将自动产生抛射体运动。

Vector2 initialVelocity = targetPoint.sub(originPoint).nor(); 
initialVelocity.scl(speed); // to apply constant speed 
body.setLinearVelocity(initialVelocity); 

我试着将y的初始速度递增到-9.8以应用重力。但它没有工作,我错过了什么?

initialVelocity.y += -9.8f; 
body.setLinearVelocity(initialVelocity); 

// or 

body.applyForce(initialVelocity, body.getWorldCenter(), true); 

重力是一种力量,而不是速度。 调用类似

Vector2 gravity = new Vector2(0, GRAVITY_EARTH); 
body.applyForceToCenter(gravity, true); 

在step函数中应该这样做。请注意,您需要在清除每帧后对其施加力量。

你必须在每一步应用反作用力来消除重力。

查看this question的其他选项。