在标高/房间之间移动角色
Moving a Character Between Levels/Rooms
我有一个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;
};
这个想法是有一个这些触发器的列表,并在它们之间循环,检查实际需要检查的对象。这是一个粗略的基础,但它提供了基本的想法。
相关文章:
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 在 b2World 之间移动 b2Body
- 在'string=string+s1'和"string+=s1"之间移动语义可以保存多少个复制操作?
- C++11 在列表到映射(或其他容器)之间移动元素
- 使用无锁指针队列在线程之间移动数据是否安全
- 在 3 点之间移动模型会导致模型偏离位置
- 在集合之间移动“ unique_ptr”
- 在线程之间移动向量
- 在变量之间移动队列而不复制元素
- 在标高/房间之间移动角色
- 在 Xcode 和 Visual Studio 之间移动时出现问题
- 如何在unique_ptrs之间移动所有权
- 在进程之间移动STL对象
- 如何设置在运行时创建的Windows控件之间移动的顺序
- 在vector中的vector之间移动指针会导致vector迭代器不兼容
- 在容器之间移动std::unique_ptr
- 在MVP层之间移动数据的众所周知的方法是什么?
- OpenCV错误:在矢量之间移动数据时断言失败
- 在缓冲区之间移动字节时出现意外结果
- 在基类之间移动语义