-1

我正计划制作一个 2d 自上而下的 rpg,所以我决定在开始之前先玩一些东西。例如,我从 Mother 3中获取了这张地图

。 我最初计划有一个 Rectangles 数组,每次调用 Update() 以检查 sprite 是否与它们发生碰撞时都会检查它,但有些形状也是如此复杂。还有另一种我应该进行碰撞检测的方法吗?因为这种方式在大规模上似乎不可行。

4

1 回答 1

1

您可以根据对象使用不同类型的边界形状。只需让它们都实现一个通用接口:

public interface IBoundingShape
{
    // Replace 'Rectangle' with your character bounding shape
    bool Intersects(Rectangle rect);
}

然后你可以有一个Circle, Rectangle, Polygonall 实现IBoundingShape。对于更复杂的对象,您可以引入复合边界形状:

public class CompoundBoundingShape : IBoundingShape
{
    public CompoundBoundingShape()
    {
        Shapes = new List<IBoundingShape>();
    }

    public List<IBoundingShape> Shapes { get; private set; }

    public bool Interesects(Rectangle rect)
    {
        foreach (var shape in Shapes)
        {
            if (shape.Intersects(rect))
                return true;
        }

        return false;
    }
}

此外,您可以将CompoundBoundingShape用作边界层次结构来提前丢弃对象。

在游戏中,您只需遍历所有游戏对象并检查玩家边界形状是否与风景相交。

于 2013-04-10T12:53:10.160 回答