如何使用LibGDX dispose()方法?

时间:2017-06-16 16:50:43

标签: java libgdx

我很不清楚LibGDX框架中的dispose()方法是如何工作的,应该如何使用。根据我所学到的,在您不需要某种资源之后,您必须进行处理以确保您的程序运行最佳。

我正在开发一个移动应用程序,我有一个AssetManager,可以在一个特殊的指定加载屏幕中加载启动时所需的所有资产。问题是我不知道何时或是否应该卸载或处置它们。

当我开始开发应用程序时,我没有让管理器在开始时加载所有资产,而且每次加载Screen的所有资产时,程序都会花费太长时间被访问了。

2 个答案:

答案 0 :(得分: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();
}

然而,如果你不再需要一个物体并且是一次性的,你应该在你不再需要它时处理它,一个例子就是Pixmaps。

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()中

答案 1 :(得分:2)

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

  • dispose() ApplicationListener界面的方法,当然还包括在其已实施的课程中ApplicationAdapterGame

    dispose()的{​​{1}}方法是生命周期方法,在销毁应用程序时调用。您在ApplicationListener方法中创建的任何可支配资源都应在此方法中销毁。

  • create() dispose()接口的方法及其适配器类Screen

    如果您需要特定ScreenAdapter的某些资源,请在Screen方法中创建该资源并使用此show()方法销毁,但不会调用屏幕dispose() dispose()生命周期方法,因此您需要自己调用。我更喜欢通过屏幕界面的ApplicationListener方法调用dispose()方法。

  • LibLDX API的许多类(如hide()dispose()SpriteBatch等等)的
  • Stage方法。

    在1 st 和2 nd 点中,我使用术语AssetManager。我怎么知道哪个是一次性物品。在libGDX中有接口disposable resource,LibGDX类使用此接口释放某些对象获取的资源。

  • Disposable接口的dispose()方法

    任何实现Disposable接口的类都需要处理。

这完全是关于Disposable方法。

  1. 如果您正在创建需要大量资源的大型游戏,那么保留所有内存并不是首选,因此您需要卸载一些您不使用的资源。

    假设我们创建的游戏有两个游戏,一个是dispose(),一个是gardening,两个游戏都需要大量的资源,所以当我们从一个游戏玩到另一个游戏,从AssetManager卸载以前的游戏资源并将新的游戏资源加载到3 match game

    您应该只在应用中保留AssetManager的一个对象,并且必须使用AssetManager ApplicationListener方法处理。

  2. 如果您正在处理小型项目/游戏,则可以避免加载和卸载资源,在dispose()方法中创建AssetManager对象一次,加载所需资源并使用全部当你通过create() dispose()方法退出游戏时,你的游戏和dispose()