LibGdx输入处理和碰撞检测

时间:2014-10-06 15:35:43

标签: input libgdx collision-detection

我正在玩libGdx,创建一个简单的平台游戏。我使用Tiled来创建地图和LibGdx tilesMap渲染器。 它与SuperKoalio libgdx示例类似。

此刻我的碰撞检测,它只是确定玩家是否已击中其右侧,上方或下方的方块。当它检测到右侧的碰撞时,它会将玩家状态设置为站立状态。 通过InputHandler控制播放器。当按下D键时,它将玩家状态设置为步行,当释放该键时,它将状态设置为站立状态。

我的问题是,如果我按住D,然后跳起并击中一个平台并停止,即使玩家已经退回并且应该能够继续移动,它也不会,直到我松开D键并再次按下它。我可以跳得很好,但不能走路。

关于为什么会这样以及我如何解决它的任何想法?我已经盯着它看了很长时间以至于我可能会遗漏一些明显的东西,在这种情况下,一双新眼睛可能会有所帮助。

这是我在我的player.update函数开始时使用的代码,以便让玩家移动。

if(state == State.Standing) {
        velocity.x = 0;
    } else if(state == State.Walking || state == State.Jumping) {
        velocity.x = MAX_VELOCITY;
    }

这是碰撞代码的摘录:

for (Rectangle tile : tiles) {
        if (playerRect.overlaps(tile)) {                
            state = State.Standing;
            break;
        }
    }

最初,碰撞响应将x velocity设置为0,并使用速度来确定状态,这仍然会产生同样的问题。

由于

1 个答案:

答案 0 :(得分:0)

当你的Collision-detection已经全部工作时,你需要改变的是碰撞处理 您将Player s state设置为Standing 你没有这样做,而是设置了一个标志collision并在update中检查了这个标志:

if(state == State.Standing || collision) {
    velocity.x = 0;
} else if(state == State.Walking || state == State.Jumping) {
    velocity.x = MAX_VELOCITY;
}  

这样你知道,如果你不动,你不能(collision==true)或者你不动,因为你没有按下键(state != State.Standing)<登记/> 当然,当你不再碰撞时,你也需要知道 为此,您可以在设置collision后重置velocity标记,并在下一帧重新计算。