【问题标题】:LibGdx - Tile Game Collision DetectionLibGdx - 瓷砖游戏碰撞检测
【发布时间】:2013-01-26 19:21:54
【问题描述】:

我正在开发一款瓷砖 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;
        }

    }
}

【问题讨论】:

    标签: java libgdx collision-detection


    【解决方案1】:

    您的 while 循环正在为您的玩家不相交的每个块应用重力。所以如果你有 10 个方块,而玩家只与 1 个相交,你仍然会应用重力 9 次。您应该只对玩家应用一次重力变化。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多