0

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

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

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

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

谢谢

4

1 回答 1

2

由于您并没有真正提供有关您的特定实现的详细信息,因此我只会为您提供一种处理此类游戏的通用方法。

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

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

示例世界

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

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

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

所以在示例图像中:

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

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

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

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

于 2014-06-20T08:32:41.043 回答