在LibGDX中切换地图

时间:2017-04-13 22:01:11

标签: java libgdx

我目前正在与其他几个人合作开展2D Top-Down RPG项目。在这一点上,我刚刚实现了在与地图边界(上,下,左,右)碰撞时切换地图的能力。但是,我相当肯定,目前,当你切换地图时,它只是将旧的地图保留在内存中,我认为随着世界变大,可能会导致内存问题。

  public int setMap(int map)
{
  currentMap = map;
  tiledMap = MyGdxGame.getAssetManager().get(Integer.toString(currentMap) + ".tmx");
  tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
  return currentMap;
}

我要做的是确保切换到新映射后,前一个映射在内存中仍然不存在。我认为对前一个映射使用dispose()方法将是解决方案,但它抛出了溢出错误。任何意见都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在平铺地图上使用.dispose。这将处理此映射使用的所有资源。其他东西最终将由GC收集。试试下面的例子。

  public int setMap(int map)
{
  currentMap.dispose(); // Dispose your map first
  currentMap = map;
  tiledMap = MyGdxGame.getAssetManager().get(Integer.toString(currentMap) + ".tmx");
  tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
  return currentMap;
}

我从未真正在LibGDX中使用了tilesmap对象,因为我宁愿自己滚动,所以这可能无法按预期工作。请注意以下事项:

  • 您可能需要在处理完之前的地图后初始化新地图。
  • 您正在此处置资源资产。当您加载另一个地图时,应该再次加载资产,但如果它们使用相同的资产,则效率会有点低。如果可能,重复使用它们。
  • 如果玩家想要回到之前的地图,您可能想要一个地图缓冲区并在稍后阶段处置它们。在构建缓冲区时,您还可以尝试异步加载相邻的地图,以完全消除地图的加载时间。