0

我正在使用 LibGDX 和随附的 Box2D 包装器 LibGDX 制作游戏。具体来说,我的游戏是一个 2D 横向卷轴。

我的问题是我的播放器精灵。我需要玩家非常精确的移动,所以我决定设置它,当玩家按下箭头键时,它会调用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
4

1 回答 1

1

我正在考虑您的玩家身体是动态的,并且动态身体具有与所有静态身体碰撞的属性。所以,如果你看一下你的 run 方法,你会LinearVelocity().y在你当前的播放器 LinearVelocity() 中传递前一个播放器。因此,当您的玩家的身体与静态身体碰撞时,它的速度变为0并且在碰撞后,如果它的 Velocity().y 变为 0,并且您继续通过该 0,您playerBody.setLinearVelocity的身体将不会移动。正在发生这样的事情。

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

碰撞后。我想如果你在你的velocity().y位置通过重力。我认为它会解决你的问题。

public void run(float x) {
    playerBody.setLinearVelocity(x, gravity.y);
}
于 2013-07-08T04:59:45.540 回答