2.5d地图与玩家碰撞

本文关键字:玩家 碰撞 地图 5d | 更新日期: 2023-09-27 18:08:21

我计划制作一款2d自上而下的rpg,所以我决定在开始之前先尝试一些东西。举个例子,我从妈妈3那里拿了这张地图。

我原本计划有一个矩形数组,每次调用Update()检查精灵是否与它们碰撞,但有些形状太复杂了。还有别的方法可以做碰撞检测吗?因为这种方式似乎不太可行。

2.5d地图与玩家碰撞

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

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

则可以使Circle, Rectangle, Polygon都实现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作为边界层次结构来早期丢弃对象。

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