我看了一下我在这里找到的那两个项目: AndEngineJb2dJson AndEngineRubeLoaderExtension
正如你们中的一些人所知,我正在开发一款基于滚动场景的游戏 我正在从XML文件加载所有实体并在加载场景中创建它们 最近我增加了游戏宽度,通过这样做,在整个关卡中我有大约500个实体(而不是250 + - ) 但这会导致性能问题,游戏“滞后”“跳跃”,一切都变得缓慢。
我的问题是,如果这些Rube Loaders支持性能问题,请做一些改进 或者就像普通的andengine加载器一样,我需要手动加载XML \ JSON中的每个实体
有没有人开发一个基于滚动场景的游戏,其数量+实体数量相同,并告诉我实现它的正确方法是什么?
由于
答案 0 :(得分:2)
由于您没有真正提供有关具体实施的详细信息,我将为您提供处理此类游戏的通用方法。
首先,您需要为您的游戏世界定义一个“活动”区域 - 这将是需要模拟的世界区域(即该区域中的实体将移动并与世界交互)。
您的世界布局可能如下所示:
在此示例中,您的世界是灰色块,并且超出了屏幕边界(黑色框架)。 红色框表示活动区域 - 请注意它超出了显示的大小,但并未覆盖整个世界。该区域的大小取决于您的具体实施/需求。
活动区域通常会与您的播放器一起移动,因此可以很容易地表示为与玩家的距离(在两个方向上)。
基本思想是实体(蓝色)仅在活动区域内进行模拟。活动区域右侧的所有实体在进入活动区域之前应该处于非活动状态,此时它们的模拟可以开始 - 因此,活动区域应该延伸一些到显示区域的右侧,以便实体具有一些初始时间在显示之前运行他们的模拟。一旦实体离开活动区域(向左),他们就可以停止模拟 - 并在需要时删除。
所以在示例图片中:
至于如何处理实体,这取决于世界的大小,实体的数量等。
一种方法是在实体进入活动区域后创建/加载实体 - 在这种情况下,它应该延伸到显示器右侧足够远,以便在进入显示区域之前有足够的时间来创建/加载。对于可能有数千个实体的大型世界而言,这是最佳方法。在这种情况下,您可能还需要对您的世界进行某种细分,以便您可以在不检查每个实体的情况下排除大量实体 - 一组固定大小的“块”,每个块包含其中的实体,可以工作对于简单的2D侧卷轴,在大多数情况下都很好。
另一种方法是在开始时加载所有对象,并且只有在进入活动区域时才对它们执行模拟更新(例如物理,移动,碰撞检测)。这种方法适用于较小的世界,并提供了更简单的实现。