边界矩形碰撞解决方案

时间:2013-09-29 16:50:44

标签: c# xna collision-detection

我正在开发一种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);
    }

好的,对不起,如果这是一个巨大的无法读取的代码量,但我不知道有任何更好的解释方法。

0 个答案:

没有答案