0

我目前正在使用 artemis 和 libgdx 开发基于实体系统的游戏,我想知道在这种配置中我应该如何处理级别更改。

例如,对于类似马里奥的平台游戏:

首先马里奥启动关卡,引擎实例化一个新的 World() 加载 tilemap 并初始化所有对象。

如果马里奥穿过管道怎么办?管道内的世界是一个新的世界()?还是相机只专注于世界的另一部分?

如果我们有一个新世界,artemis 不允许从世界中分离实体,那么我可以克隆玩家实体并将其添加到新世界吗?

有人知道如何处理这种级别的部分变化(马里奥的部分/安倍的奥德赛屏幕)吗?使用类似 artemis 的框架来实现这一目标的常用方法是什么?

4

3 回答 3

0

我最终决定添加一个房间对象层来定义矩形(见下图)

瓦片地图上方的房间层

每个房间都是一个矩形,它的 x、y 坐标和宽度、高度尺寸。每个房间都定义了允许摄像机移动的边界,如果玩家与另一个房间相交,则摄像机沿 x 轴或 y 轴从房间 n 滑动到房间 n+1,如果房间大于屏幕,允许相机滚动。

我已经能够使用这种方法提高性能并解决很多问题,可以只处理当前房间中包含的实体,而不是在每一帧计算整个世界。

于 2014-08-24T10:26:07.540 回答
0

我会创建一些 LevelTagComponent 并将其添加到所有特定于级别的实体中。自定义管理器应该做剩下的事情——当马里奥进入隧道时关闭一些实体,或者在完全改变关卡时移除它们。

于 2014-08-24T08:08:34.200 回答
0

考虑解耦每个特定关卡的构建,以便您的世界对象可以采用特定关卡,该关卡可以读取马里奥块和管道等实体的位置,也可以在该特定关卡类中定义它们。允许您的世界将新级别设置为一种方法,或者您可以每次创建一个新的世界对象并取消附加旧的对象以进行垃圾收集。对于像管道中的世界这样的东西,如果您不想在玩家已经在关卡中时加载它,那么您可以在远处某处建造房间或区域并使用管道将角色传送到房间内的位置。

于 2014-07-04T23:45:11.127 回答