gpt4 book ai didi

java - Android 圆形与矩形碰撞

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

我的屏幕上有一个球在弹跳,并且有一个静态矩形,它可以与之碰撞并应该弹开。我已经弄清楚如何测试球是否与矩形碰撞,效果很好。现在我需要确定球击中了矩形的哪一侧。我目前正在尝试这段代码(它适用于测试四个侧面,但似乎在角上有问题)...

if(Math.abs(ball.centerY-boundingBox.top) < ball.radius) {
// Hit the top

}
else if(Math.abs(ball.centerY-boundingBox.bottom) < ball.radius) {
// Hit the bottom

}
else if(Math.abs(ball.centerX-boundingBox.left) < ball.radius) {
// Hit the left

}
else if(Math.abs(ball.centerX-boundingBox.right) < ball.radius) {
// Hit the right

}

...有谁有任何想法我可以如何改进这个?或者针对此事提出更好的解决方案?

我基本上只需要确定圆碰撞后碰撞到矩形的哪一侧。我已经想出了如何测试它们是否发生碰撞。

谢谢!

最佳答案

它可能不适用于角球,因为当球击中角球时,它会同时击中两侧。如果你想让它准确地弹跳,相关的法线 vector 是从球的中心到角的法线 vector ,这将是水平和垂直之间的某个对角线。

假设当球的中心位于矩形之外时,您总是检测到重叠,您可能想要做的是:

// is the ball above the box?
if(Math.abs(ball.ballCenterY-boundingBox.top) < ball.radius)
{
if(ball.ballCentreX >= boundingBox.left)
{
if(ball.ballCentreY <= boundingBox.right)
{
// ball hit the top edge
}
else
{
// ball hit the top right corner
}
}
else
{
// hit top left corner
}
}

处理内部和外部碰撞的更好测试是找到到每条边最近点的距离,选择最小距离,然后如果最近点是角,则它是角碰撞,否则它是边碰撞。

关于java - Android 圆形与矩形碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333882/

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