gpt4 book ai didi

java - 如何在Java中检测矩形的哪条边被击中

转载 作者:行者123 更新时间:2023-12-01 10:47:48 25 4
gpt4 key购买 nike

我正在用 Java 制作 Breakout 游戏,现在我需要能够检测到砖 block 的哪一侧与球相交。目前我正在使用 intersects 方法,但这仅检测交叉点,而不是具体检测到哪一侧被击中。这是方法(我在一些评论中添加了):

public boolean intersects(Rectangle r) {
// The width of the Brick as tw
int tw = this.width;
// The height of the Brick as th
int th = this.height;
// The width of the given Rectangle as rw
int rw = r.width;
// The height of the given Rectangle as rh
int rh = r.height;
// Check if the given Rectangle or Brick does not exist
if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {

// If not, then return false because there is nothing to collide/intersect
return false;
}

// The x location of Brick as tx
int tx = this.brickLocation.x;
// The y location of Brick as ty
int ty = this.brickLocation.y;
// The x location of the given Rectangle as rx
int rx = r.x;
// The y location of the given Rectangle as ry
int ry = r.y;

// RW = RW + RX
rw += rx;
// RH = RH + RY
rh += ry;
// TW = TW + TX
tw += tx;
// TH = TH + TY
th += ty;

// overflow || intersect
return ((rw < rx || rw > tx) &&
(rh < ry || rh > ty) &&
(tw < tx || tw > rx) &&
(th < ty || th > ry));
}

我现在已经将此方法放入我的一个类中,并且正在对其进行自定义,但是我在制作它时遇到了麻烦,以便它检测到哪一侧已被击中,因为最终的返回语句是如此相互关联,你可以'不要只取其中一条线,因为为了让它知道该边在哪里结束,它需要知道其他边,这就是它在这里所做的,如果它与所有边相交(并且对侧面的外展 - 尽管当然明显它们是有限的)然后它返回 true,如果没有则返回 true,并且它没有触及形状,因为否则它会这样做。

我希望能够做的是让 if 语句决定返回什么 int (我将其返回类型从 boolean 更改为 int),从而确定它击中了哪一侧它可以以适当的方式反弹。但因为它们是如此相互依赖,我不知道如何将它们分开:

    //      overflow || intersect
return ((rw < rx || rw > tx) &&
(rh < ry || rh > ty) &&
(tw < tx || tw > rx) &&
(th < ty || th > ry));

我在这里看到了很多类似的问题,但它们要么是不同的语言,没有任何答案,要么没有任何答案可以回答该问题并已被接受。所以我想知道是否有人可以向我建议如何将它们分开,以便它可以检测到哪一侧被击中,因为我没有想法?
或者也许已经有一种 Java 方法可以为我执行此操作,并且我不必覆盖已经存在的方法?我有最新版本的 Oracle JDK 8。

最佳答案

你可以做到的一种方法是在移动球时我假设你做了这样的事情:

ball.x += speedX;
ball.y += speedY;

你可以把它变成这样:

ball.x += speedX;
if (intersects(ball, brick))
{
//Ball touched brick on left/right side (depending if speedX is positive or negative)
}
ball.y += speedY;
if (intersects(ball, brick))
{
//Ball touched brick on top/bottom side (depending if speedY is positive or negative)
}

关于java - 如何在Java中检测矩形的哪条边被击中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076667/

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