我正在开发一款平板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;
}
}
}
答案 0 :(得分:2)
你的while循环正在为玩家不与之交叉的每个区块应用重力。因此,如果你有10个积木,并且玩家仅与1相交,那么你仍将使用重力9次。您只应将重力变化应用于播放器一次。
在循环之前设置一个标志(boolean hitSomething = false
),然后如果玩家遇到任何阻止,则将其设置为true(hitSomething = true
)。然后,在循环之后,如果hitSomething
为假,则将重力应用于播放器。
使用调试器逐步执行更新方法是了解代码在这种情况下正在执行的操作的好方法。它应该比等待Stack Overflow调试代码更快。