2017-04-13 60 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對象,因爲我寧願滾動我自己的,所以這可能無法按預期工作。請注意以下事項:

  • 您可能需要在處理先前的事件後初始化新映射。
  • 您正在處理資源資產。當您加載另一張地圖時,應該再次加載資源,但如果他們使用相同的資產,則效率會有點低。如果可能,重用它們。
  • 如果玩家想要移回前一張地圖,則可能需要一個地圖緩衝區,並在稍後階段處理它們。當你建立一個緩衝區時,你也可以嘗試異步加載相鄰的地圖來完全消除地圖的加載時間。