基于实体系统的游戏中的等级部分改变

时间:2014-07-04 22:00:06

标签: libgdx artemis

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

例如,使用类似马里奥的平台游戏:

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

如果马里奥通过管道怎么办?管道内的世界是一个新的世界()?或者相机只关注世界的另一部分吗?

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

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

3 个答案:

答案 0 :(得分:0)

考虑将每个特定级别的构建分离,以便您的世界对象可以采用特定级别,该级别可以读取像mario块和管道之类的实体的位置,或者只是在特定级别类中定义它们。允许您的世界将新级别设置为方法,或者您可以每次创建一个新的世界对象,并取消旧的垃圾收集。对于像管道中的世界那样的东西如果你不想在玩家已经处于关卡状态时加载它而不是你可以在远处的某个地方建造房间或区域并使用管道将角色传送到在房间里面。

答案 1 :(得分:0)

我会创建一些LevelTagComponent并将其添加到特定级别的所有实体。自定义管理器应该完成剩下的工作 - 当Mario进入隧道时关闭一些实体,或者在完全更改关卡时将其删除。

答案 2 :(得分:0)

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

room layer above the tile map

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

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