目前我的游戏中这个功能还算正常,但我不是很擅长数学。当两个物体相撞时,如果施加到物体上的力超过设定的阈值,我希望它们能破碎成小块。目前我的碰撞事件处理程序如下。
public bool Collision(Fixture fixtureA, Fixture fixtureB, Manifold manifold)
{
Vector2 position = manifold.LocalNormal;
float angle = (float)Math.Atan2(position.Y, position.X);
Vector2 force = Vector2.Zero;
if (angle < 0)
force = new Vector2((float)(Math.Cos(angle) * fixtureA.Body.LinearVelocity.X), (float)Math.Sin(MathHelper.TwoPi + angle) * fixtureA.Body.LinearVelocity.Y);
else
force = new Vector2((float)(Math.Cos(angle) * fixtureA.Body.LinearVelocity.X), (float)Math.Sin(MathHelper.TwoPi - angle) * fixtureA.Body.LinearVelocity.Y);
double XForce = Math.Sqrt(force.X * force.X);
double YForce = Math.Sqrt(force.Y * force.Y);
double totalForce = XForce + YForce;
if ((Breakable) && (totalForce > BreakForce))
{
Breakable = false;
Active = false;
BreakUp(fixtureA, fixtureB);
}
return true;
}
我很久以前就加入了这个功能,当时只是玩玩而已。但在某些情况下会引起一些问题。例如,如果一个原始体静止在地板上,另一个原始体从相当高的高度落下来,几乎总是落下的盒子爆炸了,而静止的盒子幸存了下来。此外,如果两个盒子并排下落,并且彼此轻微接触,那么两个盒子都会在空中爆炸。这真的不太完美。有没有人有什么想法来改进我的碰撞处理程序?提前感谢。