libgdx学习记录16——资源加载器AssetManager
AssetManager用于对游戏中的资源进行加载。当游戏中资源(图片、背景音乐等)较大时,加载时会需要较长时间,可能会阻塞渲染线程,使用AssetManager可以解决此类问题。
主要优点:
1. 大多数资源加载器AssetLoader都是异步加载,可以避免阻塞渲染线程。
2. 通过引用计数来进行释放资源。
3. 通过一个对象来管理所有其他资源。
主要函数:
load(path,type)加载某个路径的资源文件,后面type指定所要加载的资源类型。这个函数只是将资源文件加入到资源队列中,并不会开始加载。
update()更新资源文件,正式加载。
getProgress()返回加载的进度。这个进度并不是平滑的,而是指已加载的资源个数与所要加载的资源总数之比。例如加载3个资源,则只可能为0,0.33,0.66,1这几个值。
finishedUpdate()强制进行同步加载。
利用AssetManager可以很好的做成loading界面,作为游戏启动前的画面。
具体代码:
package com.fxb.newtest; import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; public class Lib016_AssetManager extends ApplicationAdapter{ AssetManager manager;
SpriteBatch batch;
BitmapFont font;
Texture texture;
Music music; ShapeRenderer rend;
boolean isPlay = false; @Override
public void create() {
// TODO Auto-generated method stub
super.create(); manager = new AssetManager();
batch = new SpriteBatch();
rend = new ShapeRenderer(); manager.load( "data/pal4_2.jpg", Texture.class );
manager.load( "audio/xjwq.mp3", Music.class );
manager.load( "font/default.fnt", BitmapFont.class );
} @Override
public void render() {
// TODO Auto-generated method stub
super.render();
Gdx.gl.glClearColor( 0, 1, 1, 1 );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT ); if( !manager.update() ){
rend.setColor( Color.BLUE );
rend.begin( ShapeType.Line );
rend.rect( Gdx.graphics.getWidth()/4-1, (Gdx.graphics.getHeight()-20)/2-1, Gdx.graphics.getWidth()/2+2, 20+2 );
rend.end(); rend.setColor( Color.GREEN );
rend.begin( ShapeType.Filled );
rend.rect( Gdx.graphics.getWidth()/4, (Gdx.graphics.getHeight()-20)/2, Gdx.graphics.getWidth()/2*manager.getProgress(), 20 );
rend.end();
}
else{
texture = manager.get( "data/pal4_2.jpg", Texture.class );
music = manager.get( "audio/xjwq.mp3", Music.class );
font = manager.get( "font/default.fnt", BitmapFont.class ); batch.begin();
batch.draw( texture, Gdx.graphics.getWidth()/2-texture.getWidth()/2, 10 );
TextBounds bounds = font.getBounds( "AssetManager Test" );
font.draw( batch, "AssetManager Test", Gdx.graphics.getWidth()/2-bounds.width/2 ,10+texture.getHeight()+bounds.height+5 );
batch.end(); if( !isPlay ){
music.setVolume( 0.8f );
music.setLooping( true );
music.play();
isPlay = true;
} }
} @Override
public void dispose() {
// TODO Auto-generated method stub
manager.dispose();
rend.dispose();
batch.dispose();
super.dispose();
} }
运行结果:
加载时的画面:

加载完成后的画面:

AssetManager在libgdx中应用很广,是一个很好的资源管理工具。
libgdx学习记录16——资源加载器AssetManager的更多相关文章
- 手撸Spring框架,设计与实现资源加载器,从Spring.xml解析和注册Bean对象
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你写的代码,能接的住产品加需求吗? 接,是能接的,接几次也行,哪怕就一个类一片的 i ...
- Spring资源加载器抽象和缺省实现 -- ResourceLoader + DefaultResourceLoader(摘)
概述 对于每一个底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个以URL形式表示的网络资源,Spring 统一使用 Resource 接口进行了建模抽象,相应地,对于这些资 ...
- Spring学习笔记(1)——资源加载
<!-- 占坑,迟点补充底层原理 --> Spring支持4种资源的地址前缀 (1)从类路径中加载资源——classpath: classpath:和classpath:/是等价的,都是相 ...
- 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...
- WebKit资源加载和网络栈
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 WebKit资源加载 ...
- 简说Spring中的资源加载
声明: 本文若有 任何纰漏.错误,请不吝指正!谢谢! 问题描述 遇到一个关于资源加载的问题,因此简单的记录一下,对Spring资源加载也做一个记录. 问题起因是使用了@PropertySource来进 ...
- 【Chromium中文文档】多进程资源加载
多进程资源加载(需要更新) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture ...
- Chrome设计文档-多进程资源加载
原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个re ...
- 再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载
浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询.监听用户事件. 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞.两个很明 ...
随机推荐
- Python笔记(五):异常处理和数据存储
注:和上一篇有关联 (一) finally 和 输出异常信息 try: the_man = open(r'C:\Users\123456\Desktop\test.txt') ...
- python 多进程、多线程
1.多线程: 下面讲一个简单用法,这个模块比较简单,但是实际使用中会遇到很多坑 from multiprocessing import process def go(s): print "主 ...
- 用例设计之API用例覆盖准则
基本原则 本文主要讨论API测试的用例/场景覆盖,基本原则如下: 用户场景闭环(从哪来到哪去) 遍历所有的实现逻辑路径 需求点覆盖 覆盖维度 API协议(参数&业务场景) 中间件检查 异常场景 ...
- su、sudo、su - root的区别
su和sudo的区别 共同点:都是root用户权限: 不同点:su只获得root权限,工作环境不变,还是在切换之前用户的工作环境:sudo是完全获得root的权限和root的工作环境. sudo:表示 ...
- SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
在打开数据库的时候,突然出现异常错误,然后我去关闭sql server 服务,然后重启服务的时候,不能重启,出现以下错误 “请求失败或服务未及时响应.有关详细信息,请参见事件日志或其它适合的错误日志” ...
- [原创]使MySQL注释语句在后台能够输出的方法
开启general log或slow log的时候,前端发出的sql语句中的注释都别屏蔽掉了. 本意加注释我们想通过注释来快速知道sql是由哪个业务模块发出的.这点对dba和研发很有帮助. 一种变通的 ...
- How to display values with in piechart using Jfreechart(values in sector )
I am using Jfreechart to create pie charts. Values are displayed outside pie chart as labels. I want ...
- jquery1.9 下检测浏览器类型和版本的方法
Jquery1.9版本中$.browser已被剔除: 判断浏览器类型: 复制代码 代码如下: $.browser.mozilla = /firefox/.test(navigator.userAgen ...
- python第二十七课——os模块
演示os模块中常用的属性和函数: 1.os模块: 作用:管理文件和目录 属性: os.name:返回系统类型 常用的windows系统 --> nt os.environ:返回当前系统所有的环境 ...
- 【webGL】
1.类型化数组 WebGL设计复杂的计算,需要提前知道数值的精度,而标准的javascript数值无法满足需要.WebGL引入了一个概念,叫类型化数组. ArrayBuffer的类型,表示的只是内存中 ...