2017-06-16 45 views
1

我很不清楚LibGDX框架中的dispose()方法是如何工作和應該使用的。從我所瞭解的情況來看,在你不需要某種資源之後,你必須進行處理以確保你的程序運行最佳。應該如何使用LibGDX dispose()方法?

我正在使用移動應用程序,我有一個AssetManager,它在啓動時加載所有必需的資產,並在特定的指定加載屏幕中加載。問題是我不知道什麼時候或是否應該卸載或處理它們。

當我開始開發應用程序時,我沒有在開始時加載所有資產的管理器,並且程序花費的時間太長,無法在每次訪問時加載Screen的所有資產。

回答

1

您可以在某些類中看到dispose()方法/ LibGDX的接口API

  • dispose()ApplicationListener接口和他的過程實現的類ApplicationAdapter內的方法中,ApplicationListenerGame

    dispose()方法是生命週期方法,並且當該應用程序被破壞調用。在此方法中應該銷燬在create()方法中創建的任何可支配資源。

  • dispose()Screen接口的方法和他的適配器類ScreenAdapter

    如果你想爲特定Screen一些資源,然後創建資源show()方法,在這種dispose()方法破壞,但屏幕的dispose()ApplicationListener生命週期方法調用,所以你需要自己打電話。我更喜歡通過hide()方法調用dispose()方法的Screen界面。 LibGDX API的許多類(比如SpriteBatchStageAssetManager等等..)的

  • dispose()方法。

    在1個ST和2 第二點I使用術語disposable resource。我怎麼知道哪個是一次性物品。在libGDX中有Interface Disposable,LibGDX類使用這個接口來釋放由某個對象獲得的資源。

    方法的Disposable接口

    實現Disposable接口的任何類需要

  • dispose()以被設置。

這是關於dispose()的全部方法。


  1. 如果您正在創建大型的遊戲,需要大量的資源,然後保持所有在內存中是不可取的,所以你需要卸載你沒有使用一些資源。

    假設我們製作的遊戲有兩個遊戲,一個是gardening,另一個是3 match game類型,兩種遊戲都需要大量資源,所以當我們從一種遊戲轉移到另一種遊戲時,從AssetManager中卸載以前的遊戲資源並將新的遊戲資源加載到AssetManager

    您應該保留的AssetManager只有一個對象在你的應用程序,必須ApplicationListenerdispose()方法進行處理。

  2. 如果你在小項目/遊戲的工作,你能避免裝卸資源,一旦create()方法,負載所需的資源創造的AssetManager對象,並使用在你的遊戲,dispose()當您退出遊戲dispose()方法ApplicationListener

2

Game.dispose()或ApplicationListener.dispose()在遊戲退出時自動調用。

在這些方法中,您可以處理不斷需要的東西,比如紋理,音樂,聲音或保存這些對象的assetManager。

class MainClass extends Game.... 

@Override 
public void dispose(){ // this method is called when the game quits 
    texture1.dispose(); 
    music.dispose(); 
    assetManager.dispose(); 
} 

不過,如果你不再需要一個對象,並且是一次性的,當你不需要它沒有更多的,一個例子是像素映射,你應該處理它。

class MainClass extends Game.... 

Texture texture; 
@Override 
public void create(){ 
    Pixmap pixmap = new Pixmap(width,height, Pixmap.Format.RGBA8888); 

    pixmap.setColor(0,0,0,0.5f); 
    pixmap.fill(); 

    texture = new Texture(pixmap); 
    pixmap.dispose(); 

} 

Screen,當你不需要一個屏幕,你處理它

class SplashScreen implements Screen.... 

public void changeScreen(){ 
    dispose(); //dispose the current screen 
    setScreen(new Screen()); 
} 

@Override 
public void dispose(){ //this method doesnt get called automatically 
    splashTexture.dispose(); 
} 

那麼你可以在畫面並將其保存在內存和處理它Game.dispose()雖然

+0

所以在每類中的Dispose方法,只有當整個遊戲被關閉狀態切換時調用,或者是它,例如,如果你有多個遊戲狀態,叫什麼? – vladutelu

+0

不,自動獲取調用的唯一方法是遊戲結束時調用的Game.dispose()方法,您對**每個**類有何意義?實現'Screen'的類? – centenond

相關問題