java - LibGdx - 平铺游戏碰撞检测

标签 java libgdx collision-detection

我正在开发一款 2d 方平台游戏。到目前为止我已经做了一些事情。 我正在使用 libgdx 的矩形进行基本的碰撞检测,所以考虑到 我现在只有草 block 我用Java创建了一个 block 世界(文件阅读器尚未准备好) 问题是我的检测仅在第一次有效,换句话说,如果我产生碰撞 它检测到碰撞并执行此操作。虽然如果我在方 block 顶部生成我的玩家 如果没有碰撞,玩家就会永远跌倒。

这里是代码 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;
        }

    }
}

最佳答案

您的 while 循环正在为玩家不与之相交的每个 block 施加重力。因此,如果您有 10 个 block ,而玩家仅相交 1 个 block ,您仍将应用重力 9 次。您应该只对玩家应用一次重力变化。

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

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

关于java - LibGdx - 平铺游戏碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816413/

相关文章:

java - 使用JDBC和JWT实现Spring OAuth2,并使用基于XML的配置来自定义现有的授权流

java - 将 .csvs 插入 Java 中的 SQLite 数据库

java - LibGdx 渲染多个自定义 actor 性能

sprite-kit - 如何检测有关 Sprite 纹理的接触

java - Spring Boot Controller 不响应 POST 请求

android - LibGDX - 读取文件 : uiskin. json 时出错

java - LibGDX 按钮无法识别点击(Stage + ChangeListener)

swift - 当两个物体接触/碰撞时试图打印一些东西。稍后会在球触及桶底时增加得分

c++ - 碰撞检测和时间复杂度 : How do I make checking for collisions easier?

java - java中匹配两个路径