Libgdx AssetManager资源加载

AssetManager的使用

小游戏,资源没这么多,可以无需使用AssetManager,但要用的话,AssetManager有它的优势:

1.独立的一个地方管理资源

2.可以控制同步或者异步加载

3.提供FileHandleResolver,自定义各种类型资源的加载

步骤一:load各种资源

manager.load("data/mytexture.png", Texture.class);
manager.load("data/myfont.fnt", BitmapFont.class);
manager.load("data/mymusic.ogg", Music.class);

步骤二:update

以上manager还没真正的加载资源,加载资源有两个方法,update(),finishLoading()

update()是异步的,不堵塞,返回当前加载完了没有,可以用来绘制loading界面

public void render() {
      if(manager.update()) {
         // we are done loading, let's move to another screen!
      }

      // display loading information
      float progress = manager.getProgress()
      ... left to the reader ...
   }
getProgress()方法是返回已经加载了前面load的个数,如果要load4个,只会返回0,0.25,0.5,1,以此类推

finishLoading()在render Thread里运行,是堵塞的,可以用来load急需的资源,比如绘制loading界面的资源。

步骤三:get

manager.get("data/mytexture.png", Texture.class)

步骤四:销毁

manager管理的资源不能手动的dispose,因为可能被其他的资源引用,可以用

manager.unload("data/myfont.fnt");
或者manager.clear() or manager.dispose(),后者连manager本身都销毁了,后面不能继续调用其方法


问题一:Texture.setAssetManager(AssetManager manager),使用后白屏?

当来电、按Home键,失去Context的时候,资源需要加载,libgdx自动管理texture的reload

Texture里有个static的AssetManager,如果AssetManager==null的话,所有texture会在render thread 里reload()

如果setAssetManager设置了,那么由AssetManager管理的这些texture会异步加载。而且得onResume()跟AssetManager.update()配合使用,达到回来之后loading的效果。如果不update,回来就白屏了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值