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界面,作为游戏启动前的画面。

具体代码:


 1 package com.fxb.newtest;
2
3 import com.badlogic.gdx.ApplicationAdapter;
4 import com.badlogic.gdx.Gdx;
5 import com.badlogic.gdx.assets.AssetManager;
6 import com.badlogic.gdx.audio.Music;
7 import com.badlogic.gdx.graphics.Color;
8 import com.badlogic.gdx.graphics.GL10;
9 import com.badlogic.gdx.graphics.Texture;
10 import com.badlogic.gdx.graphics.g2d.BitmapFont;
11 import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds;
12 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
13 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
14 import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
15
16 public class Lib016_AssetManager extends ApplicationAdapter{
17
18 AssetManager manager;
19 SpriteBatch batch;
20 BitmapFont font;
21 Texture texture;
22 Music music;
23
24 ShapeRenderer rend;
25 boolean isPlay = false;
26
27 @Override
28 public void create() {
29 // TODO Auto-generated method stub
30 super.create();
31
32 manager = new AssetManager();
33 batch = new SpriteBatch();
34 rend = new ShapeRenderer();
35
36 manager.load( "data/pal4_2.jpg", Texture.class );
37 manager.load( "audio/xjwq.mp3", Music.class );
38 manager.load( "font/default.fnt", BitmapFont.class );
39 }
40
41 @Override
42 public void render() {
43 // TODO Auto-generated method stub
44 super.render();
45 Gdx.gl.glClearColor( 0, 1, 1, 1 );
46 Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
47
48 if( !manager.update() ){
49 rend.setColor( Color.BLUE );
50 rend.begin( ShapeType.Line );
51 rend.rect( Gdx.graphics.getWidth()/4-1, (Gdx.graphics.getHeight()-20)/2-1, Gdx.graphics.getWidth()/2+2, 20+2 );
52 rend.end();
53
54 rend.setColor( Color.GREEN );
55 rend.begin( ShapeType.Filled );
56 rend.rect( Gdx.graphics.getWidth()/4, (Gdx.graphics.getHeight()-20)/2, Gdx.graphics.getWidth()/2*manager.getProgress(), 20 );
57 rend.end();
58 }
59 else{
60 texture = manager.get( "data/pal4_2.jpg", Texture.class );
61 music = manager.get( "audio/xjwq.mp3", Music.class );
62 font = manager.get( "font/default.fnt", BitmapFont.class );
63
64 batch.begin();
65 batch.draw( texture, Gdx.graphics.getWidth()/2-texture.getWidth()/2, 10 );
66 TextBounds bounds = font.getBounds( "AssetManager Test" );
67 font.draw( batch, "AssetManager Test", Gdx.graphics.getWidth()/2-bounds.width/2 ,10+texture.getHeight()+bounds.height+5 );
68 batch.end();
69
70 if( !isPlay ){
71 music.setVolume( 0.8f );
72 music.setLooping( true );
73 music.play();
74 isPlay = true;
75 }
76
77 }
78 }
79
80 @Override
81 public void dispose() {
82 // TODO Auto-generated method stub
83 manager.dispose();
84 rend.dispose();
85 batch.dispose();
86 super.dispose();
87 }
88
89 }

运行结果:

加载时的画面:

加载完成后的画面:

AssetManager在libgdx中应用很广,是一个很好的资源管理工具。

libgdx学习记录16——资源加载器AssetManager,布布扣,bubuko.com

时间: 2025-01-04 06:52:29

libgdx学习记录16——资源加载器AssetManager的相关文章

[学习记录]flask资源加载

1.flask返回静态文件 在py文件目录下建立static文件夹,内放置静态文件,调用代码如下 return app.send_static_file('file.html') 其中file.html的真实路径为/static/file.html 2.flask返回模板文件 在py文件目录下建立templates文件夹,内放置静态文件,调用代码如下 return render_template('graph.html') 模板可以是一般的html文件,graph.html的路径为/templa

15.资源加载器,根据配置文件自动加载文件

前言 以前我想自己写一个加载器,用的时候加载,不用的时候再去掉,结果发现这种方式可能因为资源不统一在安卓上可能出现问题,所以搜集资料,弄成根据配置文件加载 思路 设定两个配置文件,screen,res,不同场景对应不同的screen,不同screen使用的资源为res,当切换的screen的res相同时,不对资源处理,直接切换,否则进入load场景等待资源加载和卸载,然后再跳转场景 下图为场景screen配置文件和资源res配置文件,screen配置了加载的背景图(bgImage),随后做配置化

Chrome设计文档-多进程资源加载

原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个renderer进程的网络访问 Browser process可以在进程间管理session状态,保持其一致性 Browser process可以针对每个host管理最大链接数 概述 作为一个多进程应用,Chrome分为三层.最底层的是webkit库,它主要负责页面渲染工作.之上是渲染进程Rendere

Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBundle进行打包的. 我们一般使用FBX类型的模型及动画文件,而动画文件的储存一般有两种情况,一是所有的动画和模型都一起存放到一个文件中,还有一种情况是模型单独一个文件而动画单独一个文件.这里我们就两种情况都看一下. 使用的资源是Unity3D自带的以及从一本教材中取出的两种类型的动画资源,同时需要

OGEngine学习笔记---资源加载

声音管理兼容各种音频文件格式,比特率和样本率 OGEngine开源引擎兼容各种音频视频文件格式,并且引用了硬件加速技术,来对音频文件进行io读取,简化了资源的加载和读取写入的过程,大幅度减少应用卡顿.无响应的状况出现. 一个背景音乐 多个音效 OGEngine开源引擎在同一时间只能播放一首背景音乐,但是能同时播放多个音效. 首先自定义一个枚举类ConfigData,用来存放背景音乐key和音效key. public class ConfigData { /** 背景音乐*/ public sta

自研模块加载器(四) 模块资源定位-异步加载

资源定位-动态加载 通过resolve方法进行异步解析,完整解析如下图所示: 根据上篇文章startUp.js代码,我们继续完善本章动态加载资源的代码. (function(global) { var startUp = global.startUp = { version: '1.0.1' } var data = {}; // 获取当前模块加载器配置信息 var cache = {}; // 缓存 //模块的生命周期 var status = { FETCHED: 1, SAVED: 2,

JavaScript AMD 模块加载器原理与实现

关于前端模块化,玉伯在其博文 前端模块化开发的价值 中有论述,有兴趣的同学可以去阅读一下. 1. 模块加载器 模块加载器目前比较流行的有 Requirejs 和 Seajs.前者遵循 AMD规范,后者遵循 CMD规范.前者的规范产出比较适合于浏览器异步环境的习惯,后者的规范产出对于写过 nodejs 的同学来说是比较爽的.关于两者的比较,有兴趣的同学请参看玉伯在知乎的回答 AMD和CMD的区别有哪些.本文希望能按照 AMD 规范来简单实现自己的一个模块加载器,以此来搞清楚模块加载器的工作原理.

模块加载器

模块加载器 最近在做新项目的时候自己利用一点业余时间写了一个简单的js模块加载器.后来因为用了webpack就没有考虑把它放到项目里面去,也没有继续更新它了.模块加载器开源的有很多,一般来说seaJS和reqiureJS都能满足基本需求.本篇博文主要分享一下卤煮写这个加载器的一些想法和思路,作为学习的记录. js模块化加载已经不是一个新鲜概念了,很多人都一再强调,大型项目要使用模块化开发,因为一旦随着项目的增大,管理和组织代码的难度会越来越难,使得我们对代码的管理变得重要起来.当然,在后端模块化

C编译器、链接器、加载器详解

摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作系统的启动代码和用到的库文件进行组织形成最终生成可加载.可执行代码的过程. 过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是