gpt4 book ai didi

c# - C# XNA 与 Farseer Physics 中的 OnCollision 事件处理程序问题

转载 作者:太空狗 更新时间:2023-10-29 20:55:41 24 4
gpt4 key购买 nike

我目前在我的游戏中可以正常工作,但我的数学并不出色。当两个原始动物发生碰撞时,如果施加到原始动物的力超过设定的阈值,我希望它们粉碎成微小的碎片。我目前的碰撞事件处理程序看起来像这样。

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;
}

我很久以前玩的时候就把它放在了一起。这在某些情况下会导致一些问题。例如,如果一个原始动物静止在地板上,而另一个原始动物从一个合适的高度落到它身上,几乎总是,掉落的盒子会爆炸,而静止的盒子会幸存下来。此外,如果两个箱子并排下落并且彼此有最细微的接触,那么两个箱子都会在半空中爆炸。嗯,不是很完美。有谁知道如何改进我的碰撞处理程序?提前致谢。

最佳答案

好的,所以我的 other answer是可行的。但我更仔细地查看了 Farseer 3.0(当前的 SVN 版本),发现它已经实现几乎与您正在尝试做的完全一样。

寻找“BreakableBody.cs”。您可以直接使用它 - 但除此之外您可以复制出您想要的功能。

具体来说:不是将函数附加到夹具的 OnCollision,而是要将一个函数附加到 PostSolve。它需要一个 ContactConstraint,您可以深入研究并找到碰撞产生的脉冲。

这是 BreakableBody 使用的函数的实现:

private void PostSolve(ContactConstraint contactConstraint)
{
if (!Broken)
{
float maxImpulse = 0.0f;
for (int i = 0; i < contactConstraint.manifold.PointCount; ++i)
{
maxImpulse = Math.Max(maxImpulse,
contactConstraint.manifold.Points[0].NormalImpulse);
maxImpulse = Math.Max(maxImpulse,
contactConstraint.manifold.Points[1].NormalImpulse);
}

if (maxImpulse > Strength)
{
// Flag the body for breaking.
_break = true;
}
}
}

Apparently流形中的脉冲数据仅在 PostSolve 中正确设置,而不是在 OnCollision 中设置。

关于c# - C# XNA 与 Farseer Physics 中的 OnCollision 事件处理程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308012/

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