gpt4 book ai didi

java - 重叠时,播放器卡住 libgdx 矩形

转载 作者:行者123 更新时间:2023-12-04 04:46:55 25 4
gpt4 key购买 nike

所以我正在研究碰撞检测代码,我所做的是当用户矩形与不能移动的矩形重叠时,我会阻止它们移动。因此,如果我向右移动并撞到墙,我将无法前进。这有效。但是,如果我撞到那堵墙后,我想从那个点向下或向上移动,我就会被卡住。

这就是我如何检查用户是否已感染

private void checkCollision() {
for (int x = 0; x < amount; x++) {
if (collsionRect[x].overlaps(user)) {
Gdx.app.log(ChromeGame.LOG, "Overlap");
xD = 0;
yD = 0;
}
}
}

这就是我移动用户的方式
private void moveUser() {
// camera.translate(xD, yD);
player.translate(xD, yD);
camera.position.set(player.getX(), player.getY(), 0);
// Gdx.app.log(ChromeGame.LOG, player.getX() + "," + player.getY());
user = new Rectangle(player.getX(), player.getY(), player.getWidth(),
player.getHeight());
checkCollision();
}

在我的渲染方法中,我一直调用移动 userMove 方法,直到我松开键盘,此时 xD,yD 为零

最佳答案

问题是你检查矩形是否重叠。这意味着您的角色不会发生碰撞,除非他的某些部分已经在墙内,然后他会停止移动。下次你想移动他已经碰撞的角色时(他的一部分在墙内),所以 checkCollision()将设置 xD, yD到 0 并且你的角色不会移动。

对此最简单的解决方案是进行“假”移动(插值)并检查此新移动是否会使他发生碰撞,如果他会发生碰撞,则您根本不接受此新移动。在伪代码中

new position = player.x + deltaX, player.y+deltaY
create new rectangle for player from new position
check collision with new rectangle
if not collide player.x += deltaX, player.y+=deltaY

关于java - 重叠时,播放器卡住 libgdx 矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046733/

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