2016-08-03 69 views
0

將重力應用於物理世界非常簡單,您只需創建一個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); 

回答

1

重力是一種力量,而不是速度。 調用類似

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

在step函數中應該這樣做。請注意,您需要在清除每幀後對其施加力量。

1

你必須在每一步應用反作用力來消除重力。

查看this question的其他選項。