1

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

好的,抱歉,如果这是大量不可读的代码,但我不知道有什么更好的方法来解释它。

4

0 回答 0