在标高/房间之间移动角色

Moving a Character Between Levels/Rooms

本文关键字:之间 移动 角色 房间      更新时间:2023-10-16

我有一个2d平台生成器,它可以从xml文件中绘制房间。xml文件包含常见的内容,例如敌人和瓦片的位置,以及它们的纹理映射。

在典型的"Metroidvania"游戏中,玩家将移动到一个房间的边缘,该边缘将加载相邻的房间。我的问题很一般:

如何沟通角色从当前加载的房间进入哪个房间

现在,每个房间都在一个单独的xml文件中,每个房间可能有一个以上的出口(一个周长较大的房间在下/上/左/右方向上可能有多个出口)。我认为某种图论是合适的,但我找不到如何在C++或SFML 2.1中实现这一点的例子。

考虑触发器的概念,触发器在很多游戏中都被大量使用。它们通常是没有图形表示的可压缩对象。因此,在2D平台生成器中,它将是一个不可见的盒子,当特定物体与之碰撞时,它会做一些事情

设置触发器就像设置其他对象一样,但不是绘制它。确保它检查玩家是否与它碰撞,如果碰撞了,然后执行它的操作。你可以有一个去一个房间的触发器,另一个去不同房间的触发器等等。

class TriggerBase
{
    Rectangle _bounds;
    void CheckAgainst( IObjectWithPosition* object ) const
    {
        if( object->X >= _bounds.Left &&
            object->X <= _bounds.Right &&
            object->Y >= _bounds.Top &&
            object->Y <= _bounds.Bottom )
        {
            ExecuteTrigger( object );
        }
    }
    virtual void ExecuteTrigger( IObject* object ) const = 0;
};

这个想法是有一个这些触发器的列表,并在它们之间循环,检查实际需要检查的对象。这是一个粗略的基础,但它提供了基本的想法。