2017-04-13 50 views
0

我目前正在与其他人一起制作2D自上而下的RPG项目。在这一点上,我刚刚实现了在与地图边界(上,下,左,右)碰撞时切换地图的功能。不过,我相当确定,目前,当你切换地图时,只是将旧的地图保留在内存中,我认为随着世界变得更大,我认为可能会导致内存问题下降。在LibGDX中切换地图

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

我想要做的是确保先前的地图在切换到新的地图后仍然不存在于内存中。我认为对前一张地图使用dispose()方法将是解决方案,但它会引发溢出错误。任何意见,将不胜感激,谢谢!

+0

显示你的代码,你如何试图处理地图? – Aryan

回答

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中使用tiledmap对象,因为我宁愿滚动我自己的,所以这可能无法按预期工作。请注意以下事项:

  • 您可能需要在处理先前的事件后初始化新映射。
  • 您正在处理资源资产。当您加载另一张地图时,应该再次加载资源,但如果他们使用相同的资产,则效率会有点低。如果可能,重用它们。
  • 如果玩家想要移回前一张地图,则可能需要一个地图缓冲区,并在稍后阶段处理它们。当你建立一个缓冲区时,你也可以尝试异步加载相邻的地图来完全消除地图的加载时间。