gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:30:12 24 4
gpt4 key购买 nike

我正在开发一款 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com