2D 球碰撞和分辨率
本文关键字:分辨率 碰撞 2D | 更新日期: 2023-09-27 18:35:49
>我创建了一个简单的方法,通过计算距离来检测两个球之间的碰撞。我想知道,一旦检测到碰撞,我如何更新球的位置以不允许球相互进入(相交)
private void BallCollisionBlueRed()
{
double fDist;
CentreAX = redBall.Left + ball.Width / 2;
CentreAY = redBall.Top + ball.Height / 2;
CentreBX = blueBall.Left + ball.Width / 2;
CentreBY = blueBall.Top + ball.Height / 2;
vDx = CentreBX - CentreAX;
vDy = CentreBY - CentreAY;
fDist = Math.Sqrt((vDx * vDx) + (vDy * vDy));
if (fDist < radA + radB)
{
// Help!
}
}
vDx 和 vDy 仅用于保存计算的值。我用箭头键(球员)控制两个球,我不希望它们相互反弹,但只是不允许它们相交。
你需要在脑海中想象互动。当距离正好为零时,物体将反弹并开始彼此远离。
自从大学以来已经太久了,无法计算新的轨迹,但最主要的是,如果 radA + radB - fDist 是,比如说 -4,您需要将新距离设置为 radA + radB + 4。
这将适应您拥有的任何低 fps(直到它们滞后如此严重以至于在您检测到碰撞之前它们相互穿过:-p
有关此类物理的一些好建议,我将阅读这篇博文:http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/