Diferencia entre revisiones de «LIBGDX AssetManager»
(Página creada con «<span style="font-size:150%;">UNIDADE 3: AssetManager</span> ===Introdución=== <b><u>Nota:</u></b> Esta explicación está [http://manuais.iessanclemente.net/index.php?t...») |
|||
| Línea 3: | Línea 3: | ||
===Introdución=== | ===Introdución=== | ||
| − | <b><u>Nota:</u></b> Esta explicación está [http:// | + | <b><u>Nota:</u></b> Esta explicación está [http://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Os_graficos relacionada cos gráficos]. |
Revisión actual del 15:16 7 ene 2016
UNIDADE 3: AssetManager
Sumario
Introdución
Nota: Esta explicación está relacionada cos gráficos.
Información na wiki: https://github.com/libgdx/libgdx/wiki/Managing-your-assets
O obxectivo desta clase:
- Impedir que o dispositivo móbil dea un Not Responding. Isto se pode producir se temos unha cantidade de gráficos moi alta e os cargamos como ata o de agora. A carga dos gráficos se fai no fío principal da aplicación.
- Pode realizar unha carga asíncrona dos gráficos. Desta forma podemos ter unha pantalla de carga cunha barra de progreso para facer o xogo máis amigable.
Esta clase só debería usarse cando o tamaño conxuntos de todos os gráficos sexa elevado.
Pasos para utilizar a clase AssetManager
- Primeiro debemos crear o obxecto AssetManager:
1 private AssetManager assetManager;
2 ..........
3
4 assetManager = new AssetManager();
- Despois temos que indicarlle o que queremos cargar.
- Isto se fai chamando ó método load.
assetManager.load("LIBGDX_asset_mapa1.png", Texture.class);
- - O primeiro parámetro é o nome do gráfico a cargar.
- - O segundo parámetro é a clase de gráfico a cargar. Entre estas temos:
- TextureAtlas.class
- BitmapFont.class
- Music.class
- Este método está sobrecargado e podemos enviarlle como terceiro parámetro información extra como o tipo de algoritmo de compresión para os elementos gráficos.
- Indicamos o tipo de carga que queremos:
- Carga asíncrona: Neste intre a carga se fai asincronamente de tal forma que no método render da clase que está cargando o asset podemos comprobar o progreso da carga chamando ó método update.
- Dito método devolve false no caso de que aínda estean cargando os gráficos.
- Neste caso (devolve false, polo tanto estamos a cargar os gráficos) podemos chamar ó método getProgress() que nos vai devolver un número entre 0-1 indicando o grado de progreso da carga (0 empeza ; 1 rematou de cargar).
- Carga síncrona: Se queremos que a carga se faga sincronamente, é dicir, que non continúe coa execución ata que remate de cargar, teremos que chamar ó método finishLoading().
assetManager.finishLoading();
- Unha vez cargados os gráficos temos que referencialos para poder ser usados polo noso xogo.
private Texture mapa1; ............ mapa1 = assetManager.get("LIBGDX_asset_mapa1.png",Texture.class);
- Unha vez os temos referenciados xa podemos usalos como ata o de agora.
batch.draw(mapa1,0,0,100,100);
- Unha vez que xa non os queremos utilizar temos varias opcións:
- Chamar ó método unLoad(String nomearquivo): se o gráfico está referenciado por outro assetmanager ou cargado manualmente non o libera.
- Chamar ó método clear(): desta forma se liberan todos os recursos gráficos cargados polo assetmanager, pero a diferenza do método dispose podo volver a usar o assetmanager para cargar outros gráficos.
- Chamar ó método dispose(): libera os gráficos e destrúe o assetmanager.
assetManager.dispose();
Exemplo de código
- Descargade e descomprimide o arquivo seguinte. Copialo ó cartafol assets do proxecto Android.
Dito arquivo ten 3 mapas de proba, cunha resolución de 2400x4000 pixeles de resolución. Para que vos deades unha idea, unha versión reducida do que levades comprimido é isto:
- Crear unha nova clase.
Deberedes de cambiar a clase co que inician as diferentes plataformas pola seguinte:
Versión asíncrona
Código da clase AssetManagerCarga
Obxectivo: amosar como utilizar a clase AssetManager. Carga ASÍNCRONA
1 public class AssetManagerCarga extends ApplicationAdapter {
2 SpriteBatch batch;
3
4 private AssetManager assetManager;
5
6 private Texture mapa1;
7 private Texture mapa2;
8 private Texture mapa3;
9
10
11 @Override
12 public void create () {
13 batch = new SpriteBatch();
14
15
16 assetManager = new AssetManager();
17
18 assetManager.load("LIBGDX_asset_mapa1.png", Texture.class);
19 assetManager.load("LIBGDX_asset_mapa2.png", Texture.class);
20 assetManager.load("LIBGDX_asset_mapa3.png", Texture.class);
21
22 }
23
24 @Override
25 public void render () {
26 Gdx.gl.glClearColor(1, 0, 0, 1);
27 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
28 batch.begin();
29 if (assetManager.update()){
30 mapa1 = assetManager.get("LIBGDX_asset_mapa1.png",Texture.class);
31 mapa2 = assetManager.get("LIBGDX_asset_mapa2.png",Texture.class);
32 mapa3 = assetManager.get("LIBGDX_asset_mapa3.png",Texture.class);
33 Gdx.app.log("LIBGDX","Rematou de cargar"); // Se esta é unha pantalla de carga agora cambiaríamos a do xogo
34 Gdx.app.exit();
35
36 }
37 else {
38 Gdx.app.log("LIBGDX",String.valueOf(assetManager.getProgress()));
39 }
40
41
42 batch.end();
43
44 }
45
46 @Override
47 public void dispose(){
48 assetManager.dispose();
49 }
50
51 }
Versión síncrona
Código da clase AssetManagerCarga
Obxectivo: amosar como utilizar a clase AssetManager. Carga SÍNCRONA
1 public class AssetManagerCarga extends ApplicationAdapter {
2 SpriteBatch batch;
3
4 private AssetManager assetManager;
5
6 private Texture mapa1;
7 private Texture mapa2;
8 private Texture mapa3;
9
10
11 @Override
12 public void create () {
13 batch = new SpriteBatch();
14
15
16 assetManager = new AssetManager();
17
18 assetManager.load("LIBGDX_asset_mapa1.png", Texture.class);
19 assetManager.load("LIBGDX_asset_mapa2.png", Texture.class);
20 assetManager.load("LIBGDX_asset_mapa3.png", Texture.class);
21
22 // VERSION SINCRONA
23 assetManager.finishLoading();
24
25 mapa1 = assetManager.get("LIBGDX_asset_mapa1.png",Texture.class);
26 mapa2 = assetManager.get("LIBGDX_asset_mapa2.png",Texture.class);
27 mapa3 = assetManager.get("LIBGDX_asset_mapa3.png",Texture.class);
28
29 // Xa cargamos os gráficos.
30 // No xogo que estamos a facer, esta parte iría na clase AssetManager
31
32 }
33
34 @Override
35 public void render () {
36 Gdx.gl.glClearColor(1, 0, 0, 1);
37 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
38 batch.begin();
39
40 // VERSION SINCRONA
41 batch.draw(mapa1,0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
42
43 batch.end();
44
45 }
46
47 @Override
48 public void dispose(){
49 assetManager.dispose();
50 }
51
52 }
TAREFA OPTATIVA A FACER
TAREFA OPTATIVA A FACER: Modifica a clase AssetsXogo para cargar os gráficos do xogo utilizando a clase AssetManager.
Nota:
- Lembra modificar ó método dispose para liberar o assetmanager.
- Podes aumentar o nivel de dificultade creando unha pantalla de carga cunha barra de desprazamento,
-- Ángel D. Fernández González -- (2015).