在级别/房间之间移动角色

时间:2013-11-25 19:24:53

标签: c++ sfml

我有一个2d平台游戏,从xml文件中抽取房间。 xml文件包含常见的东西,例如敌人和瓷砖的位置,以及它们的纹理映射。

在典型的“Metroidvania”游戏中,玩家将移动到一个房间的边缘,这将加载相邻的房间。我的问题很笼统:

如何从当前装载的房间传达我的角色走进哪个房间?

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

1 个答案:

答案 0 :(得分:3)

考虑触发器的概念,它在很多游戏中被大量使用。它们通常是没有图形表示的可碰撞对象。所以在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;
};

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