Andengine - 一个好的鲁布装载机?

时间:2014-06-19 08:34:47

标签: android performance game-engine andengine andengine-gles-2

我看了一下我在这里找到的那​​两个项目: AndEngineJb2dJson AndEngineRubeLoaderExtension

正如你们中的一些人所知,我正在开发一款基于滚动场景的游戏 我正在从XML文件加载所有实体并在加载场景中创建它们 最近我增加了游戏宽度,通过这样做,在整个关卡中我有大约500个实体(而不是250 + - ) 但这会导致性能问题,游戏“滞后”“跳跃”,一切都变得缓慢。

我的问题是,如果这些Rube Loaders支持性能问题,请做一些改进 或者就像普通的andengine加载器一样,我需要手动加载XML \ JSON中的每个实体

有没有人开发一个基于滚动场景的游戏,其数量+实体数量相同,并告诉我实现它的正确方法是什么?

由于

1 个答案:

答案 0 :(得分:2)

由于您没有真正提供有关具体实施的详细信息,我将为您提供处理此类游戏的通用方法。

首先,您需要为您的游戏世界定义一个“活动”区域 - 这将是需要模拟的世界区域(即该区域中的实体将移动并与世界交互)。

您的世界布局可能如下所示:

Example world

在此示例中,您的世界是灰色块,并且超出了屏幕边界(黑色框架)。 红色框表示活动区域 - 请注意它超出了显示的大小,但并未覆盖整个世界。该区域的大小取决于您的具体实施/需求。

活动区域通常会与您的播放器一起移动,因此可以很容易地表示为与玩家的距离(在两个方向上)。

基本思想是实体(蓝色)仅在活动区域​​内进行模拟。活动区域右侧的所有实体在进入活动区域之前应该处于非活动状态,此时它们的模拟可以开始 - 因此,活动区域应该延伸一些到显示区域的右侧,以便实体具有一些初始时间在显示之前运行他们的模拟。一旦实体离开活动区域(向左),他们就可以停止模拟 - 并在需要时删除。

所以在示例图片中:

  • E1 已经通过活动区域,不再需要(可以禁用/删除)
  • E2 处于活动状态且可见(当前显示)
  • E3 已激活,但尚未显示
  • E4 E5 尚未激活,只有当玩家离他们更近时才会进入活动区域

至于如何处理实体,这取决于世界的大小,实体的数量等。

一种方法是在实体进入活动区域后创建/加载实体 - 在这种情况下,它应该延伸到显示器右侧足够远,以便在进入显示区域之前有足够的时间来创建/加载。对于可能有数千个实体的大型世界而言,这是最佳方法。在这种情况下,您可能还需要对您的世界进行某种细分,以便您可以在不检查每个实体的情况下排除大量实体 - 一组固定大小的“块”,每个块包含其中的实体,可以工作对于简单的2D侧卷轴,在大多数情况下都很好。

另一种方法是在开始时加载所有对象,并且只有在进入活动区域时才对它们执行模拟更新(例如物理,移动,碰撞检测)。这种方法适用于较小的世界,并提供了更简单的实现。