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

LibGdx-平铺游戏碰撞检测

司徒焕
2023-03-14

我正在做一个2d平板游戏。到目前为止,我已经做了一些事情。我正在使用libgdx的矩形进行基本的碰撞检测,所以考虑到我现在只有草块,我用Java制作了一个单块世界(文件读取器还没有准备好),问题是我的检测只在第一次工作,换句话说,如果我产生碰撞到一个块,它会检测到碰撞并这样做。虽然如果我在没有碰撞的情况下,让我的球员在方块顶部出现,球员将永远摔倒。

这是代码world.update();=

public void update() {

    Iterator<block> cb = Blocks.iterator();
    while (cb.hasNext()) {

        block b = cb.next();
        if (b.getBounds().overlaps(player.getBounds())) {

            if (player.getPosition().x >= b.getPosition().x + 32) {
                //RIGHT
                player.getVelocity().x = 0;
            } else if (player.getPosition().x + 32 <= b.getPosition().x) {
                //Left
                player.getVelocity().x = 0;
            }
            //All Y
            player.getVelocity().y = 0;
        }
        if (!b.getBounds().overlaps(player.getBounds())) {
            player.getVelocity().y = -gravity;
        }

    }
}

共有1个答案

钱经业
2023-03-14

你的while循环为你的球员不相交的每个格块应用重力。因此,如果你有10个盖帽,球员只相交1个,你仍然会施加9次重力。你应该只对玩家应用一次重力变化。

在循环之前设置一个标志(boolean-hitSomething=false),然后如果玩家命中任何方块,则将其设置为true(hitSomething=true)。然后,在循环之后,如果hitSomething为false,则对玩家施加重力。

使用调试器逐步完成更新方法是了解代码在这种情况下正在做什么的好方法。它也应该比等待Stack Overflow调试您的代码更快。

 类似资料:
  • 我计划一个独立游戏项目已经有一段时间了。我会为你总结一下,这样我就可以直接回答这个问题。 它是通过Visual Studio完全使用最新版本的XNA完成的。希望将其放在360和PC上,但目前我只是在真正寻找面向PC的解决方案。 这是一个2D侧向滚动射击游戏(想想大都会风格,甚至是Terraria)。它最终将包括一个游戏中的地图编辑器,地图是基于图块的(16x16)。会有向上和向下滚动。我希望在开发

  • 我正在努力通过tiledmap实现一个碰撞检测系统。我有一个2d“口袋妖怪风格”的游戏,有一个平铺的地图渲染。具体来说,我的平铺地图中有一个“碰撞”层。我希望与播放器和其他实体进行交互的tmx文件。我的问题是,我如何将播放器sprite(扩展Sprite类)连接到tiledmap的“碰撞”层,并导致两者之间的碰撞。感谢任何建议。

  • 我的问题主要与它背后的理论有关。我为一个项目制作了一个2D游戏,通过使用Rectangle类中的.overlapps方法检测碰撞,碰撞处理得很好。首先,被认为是连续或离散碰撞技术。当我读到这个理论时,我说它是离散的,但我在网上的文章中读到离散的主要缺点是它在实际发生碰撞后检测到碰撞。所以,我的问题是:它实际上是离散的吗?如果是这样的话,我看不出它有什么缺点吗?谢谢

  • 问题内容: 我正在尝试制作一个Python游戏,其中红龟追逐蓝龟。当红色乌龟抓到蓝色乌龟时,我希望它在屏幕上说“碰撞”,但它不起作用。当它碰撞时,什么也没有发生,并且给我一个错误“ Turtle”对象不可调用”。 问题答案: 与实际编程相比,这段代码似乎更让人想不到: 乌龟没有方法。您不能使用此语句简单地将方法添加到现有类。没有和功能。每次运动后,如果需要,该碰撞测试将只执行一次。让我们尝试挽救我

  • 我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:( 这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码: ,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。 我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形) 我的Board类代码: 希望有人能告诉我该怎么做...似乎

  • 我对libgdx和游戏开发非常陌生。我的任务是给我一个非常简单的2D游戏,它已经实现了矩形碰撞检测。 游戏只是由一个可以由玩家控制的正方形组成,该正方形位于墙壁内,墙壁内有其他分散的正方形。我现在需要在玩家方块和散落方块/墙壁之间实现像素完美碰撞。 我最初尝试使用Pixmap,并试图检查当前坐标的像素对于播放器矩形以及与之冲突的任何矩形是否透明,但在正确实现代码时遇到了问题。 我知道我必须在某个坐