gpt4 book ai didi

Java 2D 碰撞?

转载 作者:行者123 更新时间:2023-12-01 15:42:44 30 4
gpt4 key购买 nike

嘿伙计们,我正在制作一个 2D java 游戏,我正在尝试找出如何制作一个好的碰撞代码。我目前正在使用以下代码:

    public void checkCollision() {
Rectangle player_rectangle = new Rectangle(player.getX(),player.getY(),32,32);

for(Wall wall : walls) {

Rectangle wall_rectangle = new Rectangle(wall.getX(), wall.getY(), 32,32);

if (player_rectangle.intersects(wall_rectangle)) {
Rectangle intersection = (Rectangle) player_rectangle.createIntersection(wall_rectangle);

if (player.xspeed > 0) {
player.x -= intersection.getWidth();
}

if (player.yspeed > 0) {
player.y -= intersection.getHeight();
}

if (player.xspeed < 0) {
player.x += intersection.getWidth();
}

if (player.yspeed < 0) {
player.y += intersection.getHeight();
}

Print(Integer.toString(intersection.width) + ", " + Integer.toString(intersection.height));

}

}

}

使用此代码,如果您按一个按钮,则效果很好,但如果按下并向左,例如,玩家将朝某个随机方向飞走。

这是我拥有的 map 类型的图片:

enter image description here

最佳答案

你的主要问题是假设玩家直接撞到墙上。考虑有墙矩形 (100,100,32,32) 且玩家位于 (80,68,32,32) 的情况。玩家向下并向左移动,因此player.xspeed < 0且player.yspeed > 0;假设玩家的下一个位置是 (79,69,32,32)。那么交集就是(100,100,11,1)。

请注意,虽然玩家向左(以及向下)移动,但墙壁实际上位于玩家的右侧。这一行:

if (player.xspeed < 0) {
player.x += intersection.getWidth();
}

...导致player.x突然跳转到90。

您可以做的一件事是检查玩家的左侧是否包含在交叉点中,即

if (player.xspeed < 0 && player.x >= intersection.x) {
player.x += intersection.getWidth();
}

显然其他方向也需要做类似的事情。

关于Java 2D 碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763244/

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