我目前在我的游戏中可以正常工作(ish),但我的数学并不出色。当两个原始动物碰撞时,如果施加在原始动物身上的力超过设定的阈值,我希望它们粉碎成小块。我目前的碰撞事件处理程序看起来像这样。
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;
}
很久以前我只是在玩的时候把它放进去。这在某些情况下会导致一些问题。例如,如果一个原始动物静止在地板上,而另一个原始动物从一个合适的高度落到它上面,几乎总是,落下的盒子会爆炸,而静止的盒子会幸存下来。此外,如果两个盒子并排掉落并相互接触,那么两个盒子都会在半空中炸毁。嗯,不是很完美。有谁知道如何改进我的碰撞处理程序?提前致谢。