<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_MVC</id>
	<title>LIBGDX MVC - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_MVC"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_MVC&amp;action=history"/>
	<updated>2026-10-18T07:12:55Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_MVC&amp;diff=499&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 2: Modelo-Vista-Controlador&lt;/span&gt;  ==Modelo-Vista-Controlador==  A miña idea inicial era non facer esta parte obrigatoria e poñer t...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_MVC&amp;diff=499&amp;oldid=prev"/>
		<updated>2015-12-12T17:02:55Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 2: Modelo-Vista-Controlador&amp;lt;/span&amp;gt;  ==Modelo-Vista-Controlador==  A miña idea inicial era non facer esta parte obrigatoria e poñer t...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 2: Modelo-Vista-Controlador&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modelo-Vista-Controlador==&lt;br /&gt;
&lt;br /&gt;
A miña idea inicial era non facer esta parte obrigatoria e poñer todo o control do xogo na clase PantallaXogo, facendo optativo o que vou explicar a continuación, pero resultaría demasiado complicado de manter as dúas opcións nun curso a distancia xa que o sitio onde van ir os métodos variaría.&lt;br /&gt;
&lt;br /&gt;
A idea é crear unha clase Controladora que vai mover e controlar todo o que pasa no noso xogo. &lt;br /&gt;
Quen non queira facer esta parte tería que implementar todos os métodos na clase PantallaXogo, pero eu recomendo facelo como vou explicar a continuación.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empecemos:&lt;br /&gt;
&lt;br /&gt;
Tal cal fixemos no [http://informatica.iessanclemente.net/manuais/index.php/LIBGDX_Movendo_os_graficos#Movendo_os_gr.C3.A1ficos._O_par.C3.A1metro_delta exercicio anterior] poderíamos establecer o movemento de todos os personaxes, pero nos estamos a seguir un modelo no que separamos o control (mover os gráficos) da súa visualización (render), e desta forma non o faríamos.&lt;br /&gt;
&lt;br /&gt;
O concepto é moi sinxelo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Dividimos o xogo en tres partes:&lt;br /&gt;
&lt;br /&gt;
:*Modelo: onde están definidas as clases que nos serven de base para o noso mundo. Isto xa o estamos a facer agora. Serían as clases Mundo, Personaxe, Piexe, Gancho, Pescador.&lt;br /&gt;
:*Vista: aquí só se debuxan os obxectos que conforman o noso mundo e a cámara en base as súas propiedades de posición e tamaño.&lt;br /&gt;
:*Controlador: controla todo o que sucede no noso mundo e modifica as propiedades dos obxectos que pertencen ó Modelo.&lt;br /&gt;
&lt;br /&gt;
A maiores imos ter unha zona de nome Pantallas que serán cada unha das pantallas do noso xogo e que terán as interfaces que permiten xestionar os eventos e que informarán á clase controladora de que evento se trata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Polo tanto imos ter:&lt;br /&gt;
&lt;br /&gt;
:*Paquete modelo: onde estarán as clases que nos van servir para gardar a información de cada personaxe do noso xogo. Aquí estará a clase Mundo e unha clase por cada tipo de personaxe que conforme o noso xogo (incluído disparos, plataformas,...).&lt;br /&gt;
:*Paquete renderer: clase que vai visualizar os personaxes do noso mundo. Só vai debuxar, non vai ningún tipo de control.&lt;br /&gt;
:*Paquete pantalla: clases que derivan da clase Screen e que van a implementar as interface´s que nos van permitir iteracionar co xogo (pulsar a pantalla e recoller dito evento) e chamar á clase Controladora informando de dito evento.&lt;br /&gt;
:*Paquete controlador: onde se atopan as clases que van encargarse de controlar todos os eventos (choque entre dous personaxes, disparo que alcanza a un inimigo,...) e recoller a información sobre a iteración do usuario coa pantalla dende a clase que se atopa no paquete pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Graficamente será algo parecido a isto:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_Teoria_03.jpg| center|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora por cada pantalla:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_Teoria_04.jpg| center|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Aplicando estes conceptos ó noso xogo:&lt;br /&gt;
&lt;br /&gt;
* Creamos o paquete &amp;#039;&amp;#039;&amp;#039;com.plategaxogo2d.renderer&amp;#039;&amp;#039;&amp;#039; e movemos a clase &amp;#039;&amp;#039;&amp;#039;RendererXogo&amp;#039;&amp;#039;&amp;#039; a dito paquete.&lt;br /&gt;
* Creamos o paquete &amp;#039;&amp;#039;&amp;#039;com.plategaxogo2d.controlador&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Dentro de dito paquete &amp;#039;&amp;#039;&amp;#039;creamos a clase ControladorXogo&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Modificamos o constructor de dita clase para pasarlle un obxecto da Mundo xa que o imos necesitar para controlar os personaxes do noso mundo.&lt;br /&gt;
* Creamos un método update cun parámetro delta que vai ser chamado pola clase PantallaXogo de forma continua.&lt;br /&gt;
* Creamos dentro da clase PantallaXogo un obxecto da clase controladora (ó igual que fixemos coa renderer) e chamamos ó método update.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Traducido a código, creremos unha nova clase de nome &amp;#039;&amp;#039;&amp;#039;ControladorXogo&amp;#039;&amp;#039;&amp;#039; nun paquete novo de nome &amp;#039;&amp;#039;&amp;#039;com.plategaxogo2d.controlador&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
package com.plategaxogo2d.controlador;&lt;br /&gt;
&lt;br /&gt;
import com.plategaxogo2d.modelo.Mundo;&lt;br /&gt;
&lt;br /&gt;
public class ControladorXogo {&lt;br /&gt;
	Mundo meuMundo;&lt;br /&gt;
	&lt;br /&gt;
	public ControladorXogo (Mundo mundo){&lt;br /&gt;
		this.meuMundo=mundo;&lt;br /&gt;
		&lt;br /&gt;
	 }&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Vai chamar a todos os métodos para mover e controlar os personaxes&lt;br /&gt;
	 * Tamén xestionará os eventos producidos polo usuario e que veñen dende a clase PantallaXogo&lt;br /&gt;
	 * @param delta&lt;br /&gt;
	 */&lt;br /&gt;
	public void update(float delta){&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase PantallaXogo&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; modificamos a clase para que chame á clase ControladorXogo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;5,15,23&amp;quot; &amp;gt;&lt;br /&gt;
public class PantallaXogo implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private MeuXogoGame meuXogoGame;&lt;br /&gt;
	private RendererXogo rendererXogo;&lt;br /&gt;
	private ControladorXogo controladorXogo;&lt;br /&gt;
	&lt;br /&gt;
	Mundo meuMundo;&lt;br /&gt;
&lt;br /&gt;
	public PantallaXogo(MeuXogoGame meuXogoGame) {&lt;br /&gt;
		&lt;br /&gt;
		meuMundo = new Mundo();&lt;br /&gt;
&lt;br /&gt;
		this.meuXogoGame = meuXogoGame;&lt;br /&gt;
		rendererXogo = new RendererXogo(meuMundo);&lt;br /&gt;
		controladorXogo = new ControladorXogo(meuMundo);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
&lt;br /&gt;
		rendererXogo.render(delta);&lt;br /&gt;
		controladorXogo.update(delta);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
        ................&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Movendo os gráficos co MVC==&lt;br /&gt;
&lt;br /&gt;
Agora para mover os gráficos só será necesario chamar o método update de cada personaxe e que sexa dito método o que cambie a posición en función da velocidade.&lt;br /&gt;
&lt;br /&gt;
Cando a posición cambie, a clase RendererXogo visualizará a nova posición.&lt;br /&gt;
&lt;br /&gt;
En código:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ElementoMobil&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; modificamos a clase para que mova o elemento móbil en función da velocidade.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;5,11&amp;quot; &amp;gt;&lt;br /&gt;
public class ElementoMobil extends Personaxe{&lt;br /&gt;
&lt;br /&gt;
	public ElementoMobil(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		setVelocidade(velocidade_max);&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
		posicion.add((velocidade*delta),0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Controlador&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; chamamos ó método update de cada coche. O nome do método será controladorCoches xa que a parte de mover tamén terá código de control (visto posteriormente).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;10-16,26&amp;quot; &amp;gt;&lt;br /&gt;
public class ControladorXogo {&lt;br /&gt;
&lt;br /&gt;
	Mundo meuMundo;&lt;br /&gt;
&lt;br /&gt;
	public ControladorXogo(Mundo mundo) {&lt;br /&gt;
		this.meuMundo = mundo;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void controlarCoches(float delta){&lt;br /&gt;
		&lt;br /&gt;
		for(ElementoMovil coche: meuMundo.getCoches()){&lt;br /&gt;
			coche.update(delta);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * Vai chamar a todos os métodos para mover e controlar os personaxes Tamén&lt;br /&gt;
	 * xestionará os eventos producidos polo usuario e que veñen dende a clase&lt;br /&gt;
	 * PantallaXogo&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param delta&lt;br /&gt;
	 */&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
&lt;br /&gt;
		controlarCoches(delta);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se probades o código podedes comprobar como os coches se moven á velocidade indicada na clase Mundo cando as instanciamos...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>