与物体碰撞时精灵不会掉落?

时间:2013-07-08 04:17:57

标签: java box2d libgdx

我正在使用LibGDX制作游戏,并使用随附的Box2D包装器LibGDX。具体来说,我的游戏是2D侧面滚动器。

我的问题在于我的播放器精灵。我需要非常精确的玩家移动,所以我决定将其设置为当玩家按下箭头键时,它会调用playerBody.setLinearVelocity(),然后当他们停止按键时,它会重置他们的线速度到0。

在我的游戏中,我有引力。为了确保玩家在左右移动时跌倒,我创建了方法run()

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

当我的播放器自由落体时,此功能正常。然而,当我的玩家移动到任何静止的身体(包括垂直墙壁)时,只要我按住箭头键将它们粘在墙上,它们就会停止下降。

有谁知道为什么会这样?提前谢谢。

此外,这是我对球员的摩擦,密度和恢复原状:

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

1 个答案:

答案 0 :(得分:1)

我正在考虑你的玩家身体是动态的,动态身体有与所有静态身体碰撞的属性。所以,如果你看一下你的run方法,你就会在当前玩家LinearVelocity()中传递前一个LinearVelocity().y玩家。 所以,当你的玩家的身体与静态身体碰撞时,它的速度变为0并且在碰撞之后如果它的速度()。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);
}