我正在使用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
答案 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);
}