我正在开发一个 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);
}
好的,抱歉,如果这是大量不可读的代码,但我不知道有什么更好的方法来解释它。