我正在开发一种XNA游戏框架。我目前的项目是碰撞检测/解决方案。我有一种半工作的碰撞检测方法。但是,我的问题是定向碰撞。我希望能够看到另一个对象是否在这个对象上发生碰撞,例如,右侧。
然而,我的问题是,无论我如何解决碰撞,我都会被困在我下方的另一个物体内,因此,它也被视为在右侧碰撞。
我知道这是一个模糊的问题,但我一直试图解决这个问题几天,并没有找到解决方案。
有什么想法吗?
public ICollidable IsCollidedOnLeftAny()
{
return (from ICollidable collidable in ParentObject.ParentState.ObjectList where collidable.GetCollidableComponent() != this where IsCollidedOnRight(collidable) select collidable).FirstOrDefault();
}
public bool IsCollidedWithObject(ICollidable collidable, CollisionMode mode)
{
if (IsGhost || collidable.GetCollidableComponent().IsGhost) return false;
switch (mode)
{
case CollisionMode.BoundingCircle:
var distanceVector = collidable.GetTransformComponent().Position - ParentObject.Transform.Position;
return distanceVector.Length() <= BoundingCircleRadius + collidable.GetCollidableComponent().BoundingCircleRadius;
case CollisionMode.BoundingRectangle:
return BoundingRectangle.Intersects(collidable.GetCollidableComponent().BoundingRectangle);
}
return false;
}
public bool IsCollidedOnLeft(ICollidable collidable) // Is this object collided on ITS OWN LEFT SIDE with the given object?
{
return BoundingRectangle.Right > collidable.GetCollidableComponent().BoundingRectangle.Left && !(BoundingRectangle.Left > collidable.GetCollidableComponent().BoundingRectangle.Left) && IsCollidedWithObject(collidable, CollisionMode.BoundingRectangle);
}
好的,对不起,如果这是一个巨大的无法读取的代码量,但我不知道有任何更好的解释方法。