https://manuais.iessanclemente.net/index.php?title=LIBGDX_Analizando_o_proxecto_com%C3%BAn&feed=atom&action=historyLIBGDX Analizando o proxecto común - Historial de revisiones2024-03-28T20:51:29ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=LIBGDX_Analizando_o_proxecto_com%C3%BAn&diff=51751&oldid=prevAngelfg en 11:51 30 nov 20142014-11-30T11:51:12Z<p></p>
<p><b>Página nueva</b></p><div><span style="font-size:150%;">UNIDADE 2: Analizando o proxecto común</span><br />
<br />
<br />
==Ciclo de vida do noso xogo==<br />
Como xa comentamos [http://informatica.iessanclemente.net/manuais/index.php/LIGBDX_Explicacion_Framework#Proxectos_que_vai_xerar_o_framework_LIBGDX neste entrada], o framework vai xerar un proxecto para cada plataforma e un proxecto 'común' o que van facer referencia todos eles.<br />
<br />
Este proxecto común é o '''Xogo2D-Core'''. É a clase que van facer uso todos os proxectos vai ser '''MeuXogo.java''' que é o nome que indicamos cando xeramos os proxectos coa [http://informatica.iessanclemente.net/manuais/index.php/LIBGDX_Instalaci%C3%B3n_do_framework_LIBGDX#Xeraci.C3.B3n_dos_proxectos ferramenta gráfica].<br />
<br />
[[Imagen:LIBGDX_xogos2d_17.jpg|400px]]<br />
<br />
<br />
Veremos máis adiante que imos poder chamar a clases que deriven de '''ApplicationAdapter''' como no exemplo ou ben que deriven da clase '''Game'''.<br />
<br />
Imos analizar o código moi por enriba da clase xerada:<br />
<br />
<syntaxhighlight lang="java" line enclose="div" highlight="9" ><br />
package com.plategaxogo2d.angel;<br />
<br />
import com.badlogic.gdx.ApplicationAdapter;<br />
import com.badlogic.gdx.Gdx;<br />
import com.badlogic.gdx.graphics.GL20;<br />
import com.badlogic.gdx.graphics.Texture;<br />
import com.badlogic.gdx.graphics.g2d.SpriteBatch;<br />
<br />
public class MeuXogo extends ApplicationAdapter {<br />
SpriteBatch batch;<br />
Texture img;<br />
<br />
@Override<br />
public void create () {<br />
batch = new SpriteBatch();<br />
img = new Texture("badlogic.jpg");<br />
}<br />
<br />
@Override<br />
public void render () {<br />
Gdx.gl.glClearColor(1, 0, 0, 1);<br />
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);<br />
batch.begin();<br />
batch.draw(img, 0, 0);<br />
batch.end();<br />
}<br />
}<br />
<br />
</syntaxhighlight><br />
<br />
*O primeiro (liña 9) é crear unha clase que derive da clase ApplicationAdapter. Ó facelo podemos sobrescribir os seguintes métodos:<br />
<br />
<syntaxhighlight lang="java" enclose="div" ><br />
@Override<br />
public void create() {<br />
} // Chamado cando se crea a instancia.<br />
@Override<br />
public void dispose() {<br />
} // Chamado cando se libera. Antes sempre se chama a pause.<br />
@Override<br />
public void render() {<br />
// Chamado continuamente para facer o render do xogo.<br />
} // Aquí tamén iría a lóxica do programa<br />
@Override<br />
public void resize(int width, int height) {<br />
// Chamado se cambia a resolución da pantalla (tamén se chama unha vez despois do create)<br />
}<br />
@Override<br />
public void pause() {<br />
// Chamado ó saír da aplicación.<br />
} // En Android cando se preme o boton Home ou ten unha chamada. Bo sitio para gardar o estado do xogo.<br />
@Override<br />
public void resume() {<br />
} // Chamado ó reanudar ó xogo (volvemos ó xogo en Android ou vimos de minimizar o xogo en PC)<br />
</syntaxhighlight><br />
<br />
<b>Nota:</b> O que vai facer o framework é chamar continuamente ó método render e o que faremos nese método será borrar toda a pantalla e voltar a debuxar todos os elementos do noso xogo.<br />
<br />
<br />
Imos comprobar como se van chamar ós diferentes métodos durante o ciclo de vida do noso xogo.<br />
Para velo imos usar un método que amosa na '''ventá de log''' do Eclipse os datos que lle pasemos.<br />
<br />
Creamos dentro do paquete onde se atopa a clase MeuXogo (com.plategaxogo2d.o_voso_nome) unha clase de nome Utiles.<br />
<br />
Dentro de dita clase definimos unha constante de clase cun valor que vai ser a etiqueta coa que identificaremos as mensaxes enviadas por nos ó Eclipse.<br />
<br />
<syntaxhighlight lang="java" enclose="div" ><br />
private static final String LOG = "XOGO2D";<br />
</syntaxhighlight><br />
<br />
Despois definimos un método de clase o que se lle vai pasar o nome da clase dende onde se chama, o nome do método e a mensaxe a imprimir.<br />
<br />
<syntaxhighlight lang="java" enclose="div" ><br />
/**<br />
* Método para imprimir mensaxes de log no Eclipse.<br />
* Usado para depuración (debugger)<br />
* @param clase: nome da clase de onde se chama<br />
* @param metodo: nome do método de onde se chama<br />
* @param mensaxe: mensaxe a imprimir<br />
*/<br />
public static void imprimirLog(String clase, String metodo, String mensaxe){<br />
Gdx.app.log(LOG, clase + ":"+metodo+":"+mensaxe);<br />
}<br />
</syntaxhighlight><br />
<br />
Agora xa podemos sobrescribir os diferentes métodos e facer o log de cada un deles.<br />
O faremos co método '''create''' que trae a clase.<br />
<br />
<u><b>Aviso:</b></u> Non imprimir ningún log no método '''render''' xa que dito método é chamado de forma continua (de 25-80 veces por segundo) polo framework.<br />
<br />
O código completo quedaría así:<br />
<br />
''Codigo da clase Utiles'':<br />
<syntaxhighlight lang="java" line enclose="div"><br />
package com.plategaxogo2d.angel;<br />
<br />
import com.badlogic.gdx.Gdx;<br />
<br />
public class Utiles {<br />
private static final String LOG = "XOGO2D";<br />
<br />
/**<br />
* Método para imprimir mensaxes de log no Eclipse.<br />
* Usado para depuración (debugger)<br />
* @param clase: nome da clase de onde se chama<br />
* @param metodo: nome do método de onde se chama<br />
* @param mensaxe: mensaxe a imprimir<br />
*/<br />
public static void imprimirLog(String clase, String metodo, String mensaxe){<br />
Gdx.app.log(LOG, clase + ":"+metodo+":"+mensaxe);<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
<br />
''Codigo da clase MeuXogo'':<br />
<syntaxhighlight lang="java" line enclose="div" highlight="18" ><br />
package com.plategaxogo2d.angel;<br />
<br />
import com.badlogic.gdx.ApplicationAdapter;<br />
import com.badlogic.gdx.Gdx;<br />
import com.badlogic.gdx.graphics.GL20;<br />
import com.badlogic.gdx.graphics.Texture;<br />
import com.badlogic.gdx.graphics.g2d.SpriteBatch;<br />
<br />
public class MeuXogo extends ApplicationAdapter {<br />
SpriteBatch batch;<br />
Texture img;<br />
<br />
@Override<br />
public void create () {<br />
batch = new SpriteBatch();<br />
img = new Texture("badlogic.jpg");<br />
<br />
Utiles.imprimirLog("MeuXogo", "create", "Angel");<br />
}<br />
<br />
@Override<br />
public void render () {<br />
Gdx.gl.glClearColor(1, 0, 0, 1);<br />
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);<br />
batch.begin();<br />
batch.draw(img, 0, 0);<br />
batch.end();<br />
<br />
}<br />
<br />
}<br />
<br />
</syntaxhighlight><br />
<br />
<br />
Se executamos a versión Desktop e pechamos o xogo podemos comprobar como aparecen na ventá de consola as mensaxes postas (neste caso xa están sobrescritos os métodos indicados anteriormente menos o render):<br />
<br />
<br />
[[Imagen:LIBGDX_xogos2d_18.jpg]]<br />
<br />
<u><b>Nota:</b></u> A ventá Console se pode amosar indo o menú de Eclipse Window => Show View => Console.<br />
<br />
<br />
<br />
<br />
Se o facemos na versión Android as mensaxes non aparece na ventá Console senón na ventá de ''LogCat''.<br />
<br />
<u><b>Nota:</b></u> Dita ventá se atopa no menú de Eclipse Window => Show View => Other e escoller a opción ''LogCat'' como se va na seguinte imaxe:<br />
<br />
<br />
<br />
<gallery caption="Ciclo de vida nun dispositivo móbil" widths="350" heights="300px" perrow="2"><br />
Image:LIBGDX_xogos2d_20.jpg| O entrar e saír do xogo aparecen os métodos descritos anteriormente. Para saír do xogo debemos de premer a tecla ''Back'' do dispositivo.<br />
Image:LIBGDX_xogos2d_20_B.jpg| Podemos agora filtrar as mensaxes creando un novo filtro, premendo na parte esquerda no símbolo + (cor verde).<br />
Image:LIBGDX_xogos2d_21.jpg| Os datos se filtran en base o Tag que se corresponde có valor da propiedade LOG.<br />
Image:LIBGDX_xogos2d_22.jpg| Vemos agora só os eventos do noso xogo.<br />
Image:LIBGDX_xogos2d_23.jpg| Se en vez de premer a tecla Back prememos a tecla ''Casa'' no emulador ou cambiamos de aplicación nun dispositivo real.<br />
Image:LIBGDX_xogos2d_24.jpg| Podemos observar como non executa o método dispose. Ó voltar a executar o xogo pasa polo método resume.<br />
</gallery><br />
<br />
<br />
-----<br />
'''TAREFA 2.0 A FACER:''' Esta parte está asociada á realización dunha tarefa. <br />
-----<br />
<br />
==Utilidade FPS==<br />
Outra utilidade que imos ter para desenvolver os nosos xogos é comprobar a que velocidade<br />
([http://es.wikipedia.org/wiki/Im%C3%A1genes_por_segundo fotogramas por segundo = fps]) ó que se executa o noso xogo.<br />
<br />
<br />
Definimos a propiedade fps na clase Xogo2D-core:<br />
<br />
<syntaxhighlight lang="java" enclose="div" highlight="10,15-24,28" ><br />
private FPSLogger fps;<br />
</syntaxhighlight><br />
<br />
<u>Nota:</u> Ó poñer dita liña dará un erro xa que a clase FPSLogger non está importada. Premer a combinación de teclas Ctrol+Shift+O para importalo automaticamente.<br />
<br />
Modificamos os métodos '''create''' e '''render''':<br />
<br />
<syntaxhighlight lang="java" line enclose="div" highlight="10,15-24,28" ><br />
@Override<br />
public void create() {<br />
fps = new FPSLogger();<br />
.............<br />
@Override<br />
public void render() {<br />
fps.log();<br />
..............<br />
</syntaxhighlight><br />
<br />
<br />
Podemos ver na lapela de '''Console''' se estamos a executar a versión Desktop os fotogramas por segundo.<br />
<br />
[[Imagen:LIBGDX_xogos2d_19.jpg]]<br />
<br />
<br />
A velocidade para ter un xogo 'xogable' <u>vai depender do tipo de xogo</u>, aínda que con 25fps debería chegar, pero dependerá do tipo de xogo e da persoa. <br />
<br />
Podemos consultar nesta dirección http://www.tweakguides.com/Graphics_5.html máis información sobre os fps.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2014).</div>Angelfg