Input LibGdx输入处理和冲突检测
我正在玩libGdx,创建一个简单的平台游戏。我正在使用“平铺”创建贴图和LibGdx平铺贴图渲染器。 它的设置与SuperKoalio libgdx示例类似 我现在的碰撞检测,只是确定玩家是否撞到了右边的瓷砖,上面还是下面。当它检测到右侧碰撞时,会将玩家状态设置为站立。 玩家的控制是通过InPurthandler完成的。当按下D键时,它会将玩家状态设置为步行,当松开该键时,它会将状态设置为站立 我的问题是,如果我按住D键,我跳到平台上并停下来,即使玩家已经倒下并应该能够继续移动,它也不会,直到我松开D键并再次按下它。我跳得很好,但走路不行 有没有关于为什么会这样以及我如何修复它的想法?我盯着它看了这么久,我可能错过了一些明显的东西,在这种情况下,一双新的眼睛可能会有所帮助 这是我在player.update函数开始时得到的代码,可以让玩家移动Input LibGdx输入处理和冲突检测,input,libgdx,collision-detection,Input,Libgdx,Collision Detection,我正在玩libGdx,创建一个简单的平台游戏。我正在使用“平铺”创建贴图和LibGdx平铺贴图渲染器。 它的设置与SuperKoalio libgdx示例类似 我现在的碰撞检测,只是确定玩家是否撞到了右边的瓷砖,上面还是下面。当它检测到右侧碰撞时,会将玩家状态设置为站立。 玩家的控制是通过InPurthandler完成的。当按下D键时,它会将玩家状态设置为步行,当松开该键时,它会将状态设置为站立 我的问题是,如果我按住D键,我跳到平台上并停下来,即使玩家已经倒下并应该能够继续移动,它也不会,直到
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速度设置为0,速度用于确定状态,这仍然会产生相同的问题
谢谢由于您的碰撞检测已准备就绪,您需要更改的是碰撞处理。
您将玩家状态设置为站立。
不要这样做,而是设置一个标志冲突,并在更新中检查该标志:
if(state == State.Standing || collision) {
velocity.x = 0;
} else if(state == State.Walking || state == State.Jumping) {
velocity.x = MAX_VELOCITY;
}
这样你就知道,如果你不移动,因为你不能碰撞==真,或者如果你不移动,因为你没有按状态键!=州议会
当然你也需要知道,当你不再碰撞的时候。
为此,您可以在设置速度后重置碰撞标志,并在下一帧重新计算它。如果您要自己进行碰撞检测,则会很痛苦。我认为你需要更恰当地处理碰撞,而不是将玩家的状态设置为“站立”(如果他与任何平铺相交)。在你确定他是否站着之前,你需要检查他是如何与瓷砖发生碰撞的。谢谢,我查看了我对玩家状态所做的操作,并从枚举中跳出,因此你可以在空中同时跳跃和行走,并向右移动,这似乎解决了问题。不确定我是否完全理解它为什么现在起作用,但它起作用了,这是最主要的,:D