我的方法总是这样:-
创建我自己的管理器类,如果 AssetsManager 接收实例并在最初加载游戏时加载所有游戏资产
public class Assets implements Disposable{
public static final Assets instance = new Assets();
private AssetManager manager;
// Individual assets
public PlayerAssets playerAssets;
private Assets(){}
public void init(AssetManager manager){
this.manager = manager;
manager.load(..);
manager.finishLoading();
TextureAtlas atlas = manager.get(..);
playerAssets = new PlayerAssets(atlas);
}
public void dispose(){
manager.dispose();
}
/** Sample Inner class for catching loaded game assets */
public PlayerAssets{
public final AtlasRegion legs;
PlayerAssets(TextureAtlas atlas){
legs = atlas.find(..);
}
}
}
在您的游戏类中,您加载所有游戏资产。
public class MyGame extends Game {
@Override
public void create(){
Assets.instance.init(new AssetManager()); // loading your resources
setScreen(new GameScreen());
}
}
从下面的评论更新
处置您的资产。您可能希望为所有屏幕创建一个抽象类,如下所示
public abstract class AbstractScreen implements Screen{
protected Game game;
public AbstractScreen(Game game){
this.game = game;
}
}
. . . . . .
public void dispose(){
Assets.instance.dispose();
}
然后你所有的 Screens 都会扩展这个类。例如
public class MenuScreen extends AbstractScreen {
public MenuScreen(Game game){
super(game);
}
}
调用 screen 实例 dispose 方法将释放所有资源,您可以在您可能更喜欢不同行为的地方覆盖它,例如
@everride
public void dispose(){
// super.dispose();
// Release other screen resources
}
在哪里调用屏幕处置绝对取决于您。此外,您可能希望在加载资产时显示加载屏幕以避免由于加载延迟而导致的空白屏幕如果您按上述方式覆盖处置,则处置屏幕不会处置资产