2013-07-08 81 views
0

我正在製作一款遊戲,使用LibGDX和LibGDX,它附帶的Box2D包裝器。具體來說,我的遊戲是一個2D sidescroller。與對象碰撞時,Sprite不會掉下來嗎?

我的問題是我的玩家精靈。我需要爲玩家進行非常精確的移動,所以我決定將其設置爲當玩家按下箭頭鍵時,它會調用playerBody.setLinearVelocity(),然後當他們停止按下鍵時,它會將其線速度重置爲0.

在我的比賽中,我有引力。爲了確保在移動左,右玩家落下,我創建的方法run()

public void run(float x) { 
    playerBody.setLinearVelocity(x, playerBody.getLinearVelocity().y); 
} 

這工作得很好,當我的球員是自由下落。但是,當我的玩家在任何靜態物體(包括垂直牆壁)上移動時,只要我按住將箭頭貼在牆上的箭頭鍵,它們就會停止墜落。

有誰知道這可能是爲什麼?提前致謝。

而且,這裏是我的摩擦,密度,併爲playerBody恢復原狀:

friction = 0.1f 
restitution = 0.01f 
density = 0.4f 

回答

1

我考慮到你的球員的身體是動態的,動態的主體具有所有的靜態物體發生碰撞的性質。所以,如果你看一下你的跑步方法,你可以將當前選手LinearVelocity()中的前一個LinearVelocity().y傳遞給你。 所以,當你的球員的身體與一個靜態物體碰撞時,它的速度變成0,如果它的Velocity()。y變成0,並且你繼續在你的playerBody.setLinearVelocity中傳遞那個0,你的身體不會移動。有些事情正在發生。

public void run(float x) { 
    playerBody.setLinearVelocity(x, 0); 
} 

發生碰撞後。 我想如果你通過你的velocity().y位置的重力。我認爲它會解決你的問題。

public void run(float x) { 
    playerBody.setLinearVelocity(x, gravity.y); 
} 
+0

這將工作,除了我的精靈似乎在使用您的代碼時會變慢。可能是因爲它沒有考慮到我身體的質量?我嘗試了mass * gravity.y,但是這會讓它下降得太快。 – user2029675

+0

你正在接受重力的價值是什麼?你的box2d世界以米或像素爲單位? –

+0

重力是0,-30,我不確定這是米或像素,但它似乎使我的精靈下降到我想要的速度。 – user2029675