我目前正在使用artemis和libgdx开发一个基于实体系统的游戏,我想知道我应该如何处理这种配置中的级别更改。
例如,使用一个类似马里奥的平台:
首先,Mario启动级别,引擎实例化一个新World(),加载tilemap并初始化所有对象。
如果马里奥穿过管道怎么办?管道里的世界是一个新世界吗?还是相机只聚焦在世界的另一个地方?
如果我们有一个新的世界,artemis不允许将一个实体从一个世界中分离出来,那么我可以克隆这个播放器实体并将它添加到新的世界吗?
有人知道如何处理这种级别变化(马里奥的部分/安倍的奥德赛屏幕)吗?使用类似artemis的框架实现这一目标的常见方法是什么?
发布于 2014-08-24 10:26:07
最后,我决定添加一个定义矩形的房间对象层(见下图)。

每个房间都是一个矩形,它的x,y坐标和宽度,高度尺寸。每个房间定义了允许相机移动的范围,如果播放器与另一个房间相交,相机沿着x轴或y轴从n室滑行到n+1房间,如果房间大于屏幕,则允许相机滚动。
我已经能够提高性能并使用这种方法解决许多问题,只处理当前房间中包含的实体,而不是计算每个帧的全部世界。
发布于 2014-07-04 23:45:11
考虑将每个特定级别的构建解耦,这样您的世界对象就可以接受一个特定的级别,这个级别既可以读取像mario块和管道这样的实体的位置,也可以在特定的级别类中定义它们。允许您的世界将新级别设置为一种方法,或者每次都可以创建一个新的world对象,并取消为垃圾收集而附加的旧对象。对于类似于管道中的世界,如果你不想在玩家已经达到水平的情况下加载它,你就无法在远处的某个地方建造房间或区域,并使用管道将角色传送到房间内的某个位置。
发布于 2014-08-24 08:08:34
我会创建一些LevelTagComponent,并将其添加到所有特定于级别的实体中。自定义管理器应该做剩下的-关闭一些实体时,马里奥进入调谐器或删除他们,当水平被完全改变。
https://stackoverflow.com/questions/24581129
复制相似问题