gpt4 book ai didi

java - 2D垂直/水平碰撞检测

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

我正在用 Java 编写 2D 平台游戏,但遇到了问题。我有两个对象:都有边界框,以及四个坐标来表示框的角。

我的问题是我正在尝试找到一种模拟碰撞的方法,但我似乎做不到。我尝试到处搜索,但大多数网站只是演示 OpenGL 策略。

让我们像这样表示边界框坐标:

TL:左上角
TR:右上角
BL:左下
BR:右下角

这是我最初提出的测试碰撞的方法:

if(TL1 > TL2 && TL1 < TR2) //X-axis
//Collision happened, TL1 corner is inside of second object
else if(BL1 < TL2 && BL1 > BL2) //Y-axis
//Collision happened, BL1 corner is inside of second object

这是一种非常粗略的显示方式,但基本上我是在检查一个角是否与另一个对象相交。问题是,它没有考虑到 axii。也就是说,即使一个物体位于另一个物体上方,也会发生 x 碰撞。

如果我检查两个 axii 上的碰撞,则无法判断它是水平碰撞还是垂直碰撞。或者也许有,但我还没弄清楚。

有人能指出我正确的方向吗?

最佳答案

这是来自 java.awt.Rectangle。

您应该能够修改它以适合您拥有的坐标。

/**
* Determines whether or not this <code>Rectangle</code> and the specified
* <code>Rectangle</code> intersect. Two rectangles intersect if
* their intersection is nonempty.
*
* @param r the specified <code>Rectangle</code>
* @return <code>true</code> if the specified <code>Rectangle</code>
* and this <code>Rectangle</code> intersect;
* <code>false</code> otherwise.
*/
public boolean intersects(Rectangle r) {
int tw = this.width;
int th = this.height;
int rw = r.width;
int rh = r.height;
if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
return false;
}
int tx = this.x;
int ty = this.y;
int rx = r.x;
int ry = r.y;
rw += rx;
rh += ry;
tw += tx;
th += ty;
// overflow || intersect
return ((rw < rx || rw > tx) &&
(rh < ry || rh > ty) &&
(tw < tx || tw > rx) &&
(th < ty || th > ry));
}

关于java - 2D垂直/水平碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308117/

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