如果你不讓它靜態的,那麼你必須做兩件事情之一:
- 創建
AssetManager
,然後通過你的屏幕
OR
之間的一個引用
- 創建一個新的
AssetManager
每個屏幕,並在創建屏幕時爲每個屏幕僅加載相關資產。
我傾向於在主類中創建一個AssetManager
並加載所有資產。通過你的Main
類的參考其它屏幕,以便我可以在那裏訪問assetmanager。
public class Main extends Game {
public AssetManager assetManager; // for loading all assets
@Override
public void create(){
assetManager = new AssetManager();
assetManager.load("assets/data/yourSkin", Skin.class);
assetManager.finishLoading(); // load assets (not asynchron for this example)
setScreen(new GameScreen(this));
}
@Override
public void dispose() {
assetManager.dispose(); // disposes all assets when the game exits
}
}
Gdx.app.getApplicationListener()
return ApplicationListener
instance。所以你可以對你實現的類進行類型轉換,然後輕鬆訪問該類的任何方法或數據成員。
這樣:
((Main)Gdx.app.getApplicationListener()).assetManager // <-- You can use from where you want
謝謝...最後一個選項,我可以放在哪裏; \t靜態公共AssetManager getAssetManager(){\t \t \t 返回\t((主)Gdx.app.getApplicationListener())assetManager。 \t \t \t} from in main本身?然後我只需要main.getAssetManager()就可以了。 – darkflame
'assetManager'在'Main'類中是非靜態的,所以你不能在靜態方法裏訪問 – Aryan
assetManager是公共的,所以在這裏不需要任何getter,只需要使用'((Main)Gdx.app.getApplicationListener())。 '你沒有參考'Main'類的地方。如果你在上面的代碼中引用了像GameScreen這樣的主類,那麼只需在該類中全局引用,並在該類中全部使用main.assetManager。 – Aryan