2017-06-16 42 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

相关问题