如何在特定身体上施加重力

时间:2016-08-03 08:57:53

标签: libgdx box2d game-physics

将重力应用于物理世界很容易,您只需要创建一个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将身体移动到特定目的地。现在,如果世界的重力y为-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);

2 个答案:

答案 0 :(得分:1)

你必须在每一步都施加相反的力来抵消重力。

有关其他选项,请参阅this question的答案。

答案 1 :(得分:1)

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

的内容
Vector2 gravity = new Vector2(0, GRAVITY_EARTH);
body.applyForceToCenter(gravity, true);
步骤函数中的

应该这样做。请注意,你需要在每一帧都施加力量,因为它们被清除了。