当前位置: 首页 > 知识库问答 >
问题:

LibGdx输入处理和冲突检测

顾兴昌
2023-03-14

我正在使用libGdx,创建一个简单的平台游戏。我正在使用Tiled创建映射和LibGdx tiledMap呈现器。它的设置与SuperKoalio libgdx示例类似。

我现在的碰撞检测,它只是确定玩家是撞到了它的右边,上面还是下面的一个瓷砖。当它检测到右侧碰撞时,它将玩家状态设置为Standing。对播放机的控制是通过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;
        }
    }

共有1个答案

扈昀
2023-03-14

由于您的冲突检测已完全就绪,您需要更改的是冲突处理。
您将播放器状态设置为standing
您需要设置一个标志冲突并在更新中检查此标志:

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)
当然您也需要知道,当您不再发生碰撞时。
为此,您可以在设置velocity之后重置collision标志,并在下一帧重新计算它。

 类似资料:
  • 好的,我想试试这个: > 然后检查碰撞检测,如图所示。第一种是正面碰撞,第二种是侧面碰撞。碰撞http://img802.imageshack.us/img802/2934/rectangles2.png 然后删除精灵,只保留代码中的向量。(位置和旋转)我希望如此,因为我想在这些位置添加3d Cars和他的旋转。我的意思是,在2d中没有精灵的碰撞检测。 在游戏结束时,将没有精灵。仅三维对象。 有人

  • 主要内容:执行 master 分支变更,出现冲突,解决冲突假设要在分支中执行更改,修改分支中的代码。添加一个计算长度的函数:,代码变化如下 - 假设验证代码后,没有问题就提交这些更改。 执行 master 分支变更 同时在分支中,另外一个开发人员()还会更改了内容,并将其更改推送到分支。 验证差异后,现在就提交更新内容。 在分支上,我们已经实现了一个函数。假设经过测试后,提交并将其更改推送到分支。 出现冲突 假设另外一个开发人员()想看看我们在分支上做了

  • 对于很多人来说,合并时出现冲突是非常可怕的事,这就好像一不小心格式化了自己的硬盘一样。在这一章节里我将为你消除这种恐惧。 你不会把事情搞砸 首先你应该记住,你总是可以撤销一个合并操作,并且返回到冲突发生之前的状态。也就是说,你永远有机会放弃并重新开始。 如果你已经掌握了一些关于其它的版本控制系统的使用经验,例如 Subversion ,你可能会很难过。因为在 Subversion 中处理冲突是被大

  • 我正在开发一款新游戏,我正在用LibGDX实现屏幕。 我对触摸屏和触摸屏的结合有点迷恋。 我的渲染方法中包含以下内容: 目前我有4个不同的屏幕,当isTouch被触发时,它们都发生了变化,问题是在我触摸第一个屏幕一次后,它从屏幕1变成了4。我试图将输入处理器设置为空,但它仍然从屏幕1跳到4,而无需在每个屏幕上等待。屏幕1上的触摸似乎也会在屏幕2 3和4上自动触发。如何重置输入处理器或在下一个屏幕加

  • libgdx.我不想有一个演员在舞台上得到触摸输入。在将stage添加到代码之前使其工作。 :

  • 下面是冲突处理程序代码 这里有错误,这里是反应方法 但是,如果它们相距较远,则代码可以完美地工作。 我还注意到,如果这个矩形在另一个矩形的左边,它可能会穿过其他矩形,但是如果它再靠右一点,它就会像落在那个矩形上一样被挂起来。上图有效的唯一原因是因为最右边的先掉落,如果落在左边的矩形之后,另一个矩形左边的任何东西也会被挂起来 我只是不知道我到底做错了什么,非常感谢你的帮助!