1

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

    }
}
4

1 回答 1

2

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

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

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

于 2013-02-11T18:03:53.283 回答