【发布时间】:2014-10-06 15:35:42
【问题描述】:
我正在使用 libGdx,创建一个简单的平台游戏。我正在使用 Tiled 创建地图和 LibGdx tiledMap 渲染器。 它与 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速度为0,速度是用来判断状态的,还是产生了同样的问题。
谢谢
【问题讨论】:
-
如果你要自己做碰撞检测是一件很痛苦的事情。我认为您需要更适当地处理碰撞,而不是将玩家状态设置为站立,如果他与任何瓷砖相交。在确定他是否站立之前,您需要检查他是如何与瓷砖碰撞的。
-
谢谢,我查看了我对玩家状态所做的事情,并将 Jumping 从枚举中移出,这样你就可以同时跳跃和行走(在空中和向右移动)和它似乎已经解决了。不知道我是否完全理解为什么它现在有效,但它有效,这是主要的,:D
标签: input libgdx collision-detection