gpt4 book ai didi

java - 找出 2D AABBxAABB 的哪一侧发生碰撞?

转载 作者:行者123 更新时间:2023-11-30 09:44:25 25 4
gpt4 key购买 nike

我正在制作一个 breakout/brick-breaker/arkanoid 克隆 (opengl-es/android),我已经在我的碰撞检测代码上停留了很长一段时间。顾名思义:如何判断球击中了砖 block 的哪一侧?

因为我只需要在某个方向(x 或 y)上反转速度,所以当砖 block 被击中时我可以想到:

 if(speedY < 0) : left, upper or right
else : left, bottom or right
if(speedX < 0) : bottom, right or upper
else : bottom, left or upper

然而,这并没有让我决定它是垂直碰撞还是水平碰撞,以及接下来我应该将球传向哪个方向。

我看过互联网上的一些代码示例,但这些代码示例对我来说通常非常模糊、复杂或离题。

最佳答案

好吧,如果您知道积木的位置和球的位置,您就可以对每个对象进行测试以确定积木的一侧。

假设标准 Java 原点在左上角:

   +----+
( )| |
+----+

如果球的 Max-X < 积木的 Min-X,您就知道它必须在左侧,反之亦然。您还将测试顶部和底部碰撞的 Y 值。

当然,这假设您已经首先进行了碰撞检测。


编辑


这是我的碰撞引擎的摘录,这只是一个例子,但这是我测试对象是否位于与之碰撞的物体左侧的方式。

else if ((oCenter.getX() < sCenter.getX()) 
&& ((oCenter.getY() < (sCenter.getY() + sourceHalfHeight))
&& (oCenter.getY() > (sCenter.getY() - sourceHalfHeight))))
return LEFT;

在我的示例中,oCenter 是一个 Point2D,它是球的中心。 sCenter 是一个 Point2D,它是矩形的中心。 sourceHalfHeight 是矩形(中心点为 sCenter 的对象)高度的一半。

伪代码算法:

if (the center X of the ball < the center X of the rectangle
AND the center Y of the ball is BETWEEN the max Y and min Y of the rectangle)
then the ball is to the LEFT of the rectangle
end if

关于java - 找出 2D AABBxAABB 的哪一侧发生碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922390/

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