C# 迎面碰撞玩家与任何物体碰撞
我正在使用farseer物理引擎创建一个2D平台,我正在经历最艰难的时刻,试图找出如何使用OnCollision,尽管我看到了,但我仍在努力掌握这个概念。这就是我的工作。我想知道球员什么时候触地,这样我就可以有一个叫isJumping的球。当玩家跳跃时,“isJumping”为真,因此玩家不会一直跳跃。 (我还想有一个地面布袋,上面写着“干草,你在地上”。) 这段代码的问题是我将得到一个空引用。我也只是在检测地板物体,我是否需要了解如何检测我放在屏幕上的其他项目以及地板物体C# 迎面碰撞玩家与任何物体碰撞,c#,xna,C#,Xna,我正在使用farseer物理引擎创建一个2D平台,我正在经历最艰难的时刻,试图找出如何使用OnCollision,尽管我看到了,但我仍在努力掌握这个概念。这就是我的工作。我想知道球员什么时候触地,这样我就可以有一个叫isJumping的球。当玩家跳跃时,“isJumping”为真,因此玩家不会一直跳跃。 (我还想有一个地面布袋,上面写着“干草,你在地上”。) 这段代码的问题是我将得到一个空引用。我也只是在检测地板物体,我是否需要了解如何检测我放在屏幕上的其他项目以及地板物体 public boo
public bool OnCollision(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact)
{
if (contact.IsTouching())
{
if (fixtureA.Body.GetType() == Person.GetType() & fixtureB.Body.GetType() == game1.floor.GetType())
{
ground = true;
isJumping = false;
}
}
return false;
}
确定玩家是否在空中的更好方法是使用光线投射 例如,我使用这样的方法来确定光线与哪个对象发生碰撞(注意:RayCastResult只是一个保存结果的类):
public static RayCastResult FindClosest(this World world, Vector2 startPoint, Vector2 endPoint, Func<Fixture, bool> filter)
{
var result = new RayCastResult ();
world.RayCast((f, p, n, fr) =>
{
if (filter(f)) {
return -1.0f;
}
result.Fixture = f;
result.HitPoint = p;
result.HitPointSurfaceNormal = n;
return fr;
}, startPoint, endPoint);
return result;
}
private bool RunInAirHitTest(Vector2 start, Vector2 end)
{
var hitTest = _world.FindClosest (start, end, f => IsHit(f.Body));
var hitDistance = (hitTest.HitPoint - start).Length ();
return !hitTest.HitOccurred || hitDistance > _wheelRadius * 1.2f;
}