<?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_Creando_o_mundo</id>
	<title>LIBGDX Creando o mundo - 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_Creando_o_mundo"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Creando_o_mundo&amp;action=history"/>
	<updated>2026-10-17T11:55:20Z</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_Creando_o_mundo&amp;diff=504&amp;oldid=prev</id>
		<title>Wiki en 17:08 12 dic 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Creando_o_mundo&amp;diff=504&amp;oldid=prev"/>
		<updated>2015-12-12T17:08:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 17:08 12 dic 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l225&quot; &gt;Línea 225:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 225:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Para solucionar este problema temos varias aproximacións:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Para solucionar este problema temos varias aproximacións:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* Ter outra textura cargada na clase AssetsXogo que sexa a mesma pero volteada.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* Ter outra textura cargada na clase AssetsXogo que sexa a mesma pero volteada.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* Utilizar a clase [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html TextureRegion]. Esta clase a volveremos a ver na [http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;informatica&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iessanclemente&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;net/manuais&lt;/del&gt;/index.php?title=LIBGDX_Animacions&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;amp;action=edit&amp;amp;redlink=1 &lt;/del&gt;sección de animación] en programación avanzada.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:* Utilizar a clase [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html TextureRegion]. Esta clase a volveremos a ver na [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cifprodolfoucha&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;es&lt;/ins&gt;/index.php?title=LIBGDX_Animacions sección de animación] en programación avanzada.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;::Dita clase posúe o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html#flip-boolean-boolean- flip] que serve para &amp;#039;voltear&amp;#039; a imaxe nun ou nos dous eixes x,y.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;::Dita clase posúe o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html#flip-boolean-boolean- flip] que serve para &amp;#039;voltear&amp;#039; a imaxe nun ou nos dous eixes x,y.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l447&quot; &gt;Línea 447:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 447:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Liñas 10-12: o mesmo pero para o caso de que a rocha vaia de esquerda a dereita.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Liñas 10-12: o mesmo pero para o caso de que a rocha vaia de esquerda a dereita.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lembrade que xa vimos [http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;manuais&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iessanclemente&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;net&lt;/del&gt;/index.php?title=LIBGDX_Movendo_os_graficos#Clase_Array:_Borrando_un_elemento_do_array como eliminar un elemento do array].&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lembrade que xa vimos [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cifprodolfoucha&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;es&lt;/ins&gt;/index.php?title=LIBGDX_Movendo_os_graficos#Clase_Array:_Borrando_un_elemento_do_array como eliminar un elemento do array].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Creando_o_mundo&amp;diff=502&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 2: Creando o mundo&lt;/span&gt;  ==O fondo de pantalla== Para empezar com algo fácil imos poñer o fondo de pantalla ó noso xogo. O gráfi...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Creando_o_mundo&amp;diff=502&amp;oldid=prev"/>
		<updated>2015-12-12T17:04:59Z</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: Creando o mundo&amp;lt;/span&amp;gt;  ==O fondo de pantalla== Para empezar com algo fácil imos poñer o fondo de pantalla ó noso xogo. O gráfi...»&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: Creando o mundo&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==O fondo de pantalla==&lt;br /&gt;
Para empezar com algo fácil imos poñer o fondo de pantalla ó noso xogo. O gráfico xa o tedes no cartafol xa que viña na tarefa 2.3 co nome LIBGDX_itin1_fondoxogo.jpg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Exercicio proposto:&amp;lt;/u&amp;gt;&amp;lt;/b&amp;gt; Debuxade o gráfico do fondo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Solución&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase RendererXogo&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; Debuxar o fondo do xogo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2-5,13&amp;quot; &amp;gt;&lt;br /&gt;
        .............&lt;br /&gt;
	private void debuxarFondo(){&lt;br /&gt;
		spritebatch.draw(AssetsXogo.textureFondo,&lt;br /&gt;
                                 0,0,Mundo.TAMANO_MUNDO_ANCHO,Mundo.TAMANO_MUNDO_ALTO);&lt;br /&gt;
	}&lt;br /&gt;
        .............&lt;br /&gt;
        public void render(float delta) {&lt;br /&gt;
		Gdx.gl.glClearColor(0, 0, 0, 1);&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
		spritebatch.begin();&lt;br /&gt;
		&lt;br /&gt;
			debuxarFondo();&lt;br /&gt;
		&lt;br /&gt;
			debuxarAlien();&lt;br /&gt;
			debuxarNave();&lt;br /&gt;
			&lt;br /&gt;
			debuxarCoches();&lt;br /&gt;
		&lt;br /&gt;
		spritebatch.end();&lt;br /&gt;
		&lt;br /&gt;
		if (debugger) {&lt;br /&gt;
			debugger();&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;
==Os inimigos: Elementos móbiles parte I==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Agora entramos mais en temas de programación que do propio framework. Neste punto teremos como límite a imaxinación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Temos que ter en conta varias consideracións:&lt;br /&gt;
&lt;br /&gt;
*Á hora de afrontar este tipo de inimigos que desaparecen e aparecen polo lado contrario temos dúas opcións:&lt;br /&gt;
:* Eliminar o inimigo de array cando chega ó final e crear un novo.&lt;br /&gt;
:* Mover o inimigo de volta á posición inicial.&lt;br /&gt;
&lt;br /&gt;
::A segunda opción é máis sinxela. Imos a utilizar esta opción para os coches e para as rochas usaremos a primeira para ver como se eliminan os obxectos do array.&lt;br /&gt;
&lt;br /&gt;
*Ademais temos que tomar a decisión de se o número de inimigos (coches-autobuses) é sempre o mesmo ou ben o modificamos de forma aleatoria, de tal forma que poden aumentar ou diminuír. Nos imos a escoller a opción máis sinxela. Se algún alumno quere facer a complexa pode facelo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A forma máis sinxela de crear os inimigos é engadilos un a un na clase Mundo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
public class Mundo {&lt;br /&gt;
         .............&lt;br /&gt;
	 public final static Vector2 TAMANO_COCHES = new Vector2(20,15);&lt;br /&gt;
	 public final static Vector2 TAMANO_AUTOBUSES = new Vector2(30,15);&lt;br /&gt;
	 public final static Vector2 TAMANO_ROCA = new Vector2(60,60);&lt;br /&gt;
	 public final static Vector2 TAMANO_TRONCO = new Vector2(80,40);&lt;br /&gt;
	 &lt;br /&gt;
         .............&lt;br /&gt;
	 &lt;br /&gt;
	 public Mundo(){&lt;br /&gt;
		 alien = new Alien(new Vector2(100,20), new Vector2(15,15),100);&lt;br /&gt;
		 nave = new Nave(new Vector2(0,480),new Vector2(40,20),60f);&lt;br /&gt;
		 &lt;br /&gt;
		 coches = new Array&amp;lt;ElementoMobil&amp;gt;();&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(0,345),TAMANO_AUTOBUSES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(70,345),TAMANO_COCHES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(95,345),TAMANO_COCHES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(115,345),TAMANO_COCHES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(140,345),TAMANO_AUTOBUSES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(210,345),TAMANO_AUTOBUSES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(240,345),TAMANO_COCHES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(278,345),TAMANO_COCHES.cpy(),50,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 &lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(40,380),TAMANO_COCHES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(70,380),TAMANO_COCHES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(105,380),TAMANO_COCHES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(150,380),TAMANO_AUTOBUSES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(180,380),TAMANO_AUTOBUSES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(220,380),TAMANO_COCHES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(265,380),TAMANO_AUTOBUSES.cpy(),35,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&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;
Ó principio definimos o tamaño que queremos que teñan os diferentes elementos (pódense cambiar) e despois engadimos ó array de coches un a un cada un dos coches/autobuses que aparece en pantalla.&lt;br /&gt;
&lt;br /&gt;
Fixarse que chamamos á [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Vector2.html#cpy-- funcion cpy] para crear unha copia do vector tamaño e mandala ó constructor.&lt;br /&gt;
&lt;br /&gt;
Esta sería a forma máis sinxela. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora temos que controlar que cando o coche chegue ó extremo, este volva ó principio.&lt;br /&gt;
&lt;br /&gt;
Dito código o teremos que poñer na clase ControladorXogo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&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; controlar cando o coche/autobús chega ó extremo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;5-7&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
	private void controlarCoches(float delta){&lt;br /&gt;
		&lt;br /&gt;
		for(ElementoMobil coche: meuMundo.getCoches()){&lt;br /&gt;
			coche.update(delta);&lt;br /&gt;
			if (coche.getPosicion().x&amp;gt;=Mundo.TAMANO_MUNDO_ANCHO){&lt;br /&gt;
				coche.setPosicion(-40, coche.getPosicion().y);&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Agora queda por poñer os coches que &amp;#039;&amp;#039;veñen en sentido contrario&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Imos engadir ó noso mundo dous liñas de coches:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Mundo&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;  enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
                 ...............&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(0,400),TAMANO_AUTOBUSES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(30,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(70,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(95,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(115,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(140,400),TAMANO_AUTOBUSES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(210,400),TAMANO_AUTOBUSES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(240,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(278,400),TAMANO_COCHES.cpy(),-45,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
                 ...............&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(0,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(70,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(115,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(140,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(240,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(278,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
&lt;br /&gt;
                 ...............&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estes coches irán de dereita a esquerda. Como o facemos ?&lt;br /&gt;
&lt;br /&gt;
Temos dous problemas a ter en conta:&lt;br /&gt;
&lt;br /&gt;
* A parte controladora: xa que agora os coches deben aparecer na parte dereita cando cheguen ó final. O tema do movemento xa está solucionado, xa que se vos fixades, &amp;#039;&amp;#039;&amp;#039;a velocidade dos coches engadidos ó noso mundo E NEGATIVA&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* A parte visual, xa que teremos que voltear a imaxe.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Parte conntroladora:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&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; controlar cando o coche/autobús chega ó extremo esquerdo ou dereito dependendo 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-14&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
	private void controlarCoches(float delta){&lt;br /&gt;
		&lt;br /&gt;
		for(ElementoMobil coche: meuMundo.getCoches()){&lt;br /&gt;
			coche.update(delta);&lt;br /&gt;
			if (coche.getVelocidade()&amp;gt;0){	// Vai de esquerda a dereita&lt;br /&gt;
				if (coche.getPosicion().x&amp;gt;=Mundo.TAMANO_MUNDO_ANCHO){&lt;br /&gt;
					coche.setPosicion(-Mundo.TAMANO_AUTOBUSES.x, coche.getPosicion().y);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{	// Vai de dereita a esquerda&lt;br /&gt;
				if (coche.getPosicion().x&amp;lt;=-coche.getTamano().x){&lt;br /&gt;
					coche.setPosicion(Mundo.TAMANO_MUNDO_ANCHO, coche.getPosicion().y);&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;
Varias consideracións:&lt;br /&gt;
*Se imos de esquerda a dereita, cando chegue ó final (coche.getPosicion().x&amp;gt;=Mundo.TAMANO_MUNDO_ANCHO) o posicionamos na parte esquerda da pantalla pero fora da visión do xogador, para facer que vaia aparecendo. Dos dous elementos móbiles, o máis grande é o autobús e por iso os poñemos nesa posición en negativo (para que quede fora da pantalla).&lt;br /&gt;
*Se imos de dereita a esquerda temos que ter en conta que o coche é máis pequeno que o autobús e polo tanto cando o trasladamos á posición inicial (á parte dereita) temos que movelo un pouco máis a dereita que o autobús xa que se non en cada pasada o coche se irá achegando máis ó autobús.&lt;br /&gt;
&lt;br /&gt;
O podedes probar có código anterior.&lt;br /&gt;
&lt;br /&gt;
Para solucionalo:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&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; controlar cando o coche/autobús chega ó extremo esquerdo ou dereito dependendo da velocidade.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;12-13&amp;quot; &amp;gt;&lt;br /&gt;
	private void controlarCoches(float delta){&lt;br /&gt;
		&lt;br /&gt;
		for(ElementoMobil coche: meuMundo.getCoches()){&lt;br /&gt;
			coche.update(delta);&lt;br /&gt;
			if (coche.getVelocidade()&amp;gt;0){	// Vai de esquerda a dereita&lt;br /&gt;
				if (coche.getPosicion().x&amp;gt;=Mundo.TAMANO_MUNDO_ANCHO){&lt;br /&gt;
					coche.setPosicion(-Mundo.TAMANO_AUTOBUSES.x, coche.getPosicion().y);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{	// Vai de dereita a esquerda&lt;br /&gt;
				if (coche.getPosicion().x&amp;lt;=-coche.getTamano().x){&lt;br /&gt;
					if (coche.getTipo()==ElementoMobil.TIPOS_ELEMENTOS.COCHE)	// E un coche enton necesitamos situalo un pouco a dereita se non vai pisando o autobus&lt;br /&gt;
						coche.setPosicion(Mundo.TAMANO_MUNDO_ANCHO+Mundo.TAMANO_AUTOBUSES.x-Mundo.TAMANO_COCHES.x, coche.getPosicion().y);&lt;br /&gt;
					else&lt;br /&gt;
						coche.setPosicion(Mundo.TAMANO_MUNDO_ANCHO, coche.getPosicion().y);&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;
Parte de renderizado:&lt;br /&gt;
Para solucionar este problema temos varias aproximacións:&lt;br /&gt;
:* Ter outra textura cargada na clase AssetsXogo que sexa a mesma pero volteada. &lt;br /&gt;
:* Utilizar a clase [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html TextureRegion]. Esta clase a volveremos a ver na [http://informatica.iessanclemente.net/manuais/index.php?title=LIBGDX_Animacions&amp;amp;action=edit&amp;amp;redlink=1 sección de animación] en programación avanzada.&lt;br /&gt;
&lt;br /&gt;
::Dita clase posúe o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html#flip-boolean-boolean- flip] que serve para &amp;#039;voltear&amp;#039; a imaxe nun ou nos dous eixes x,y.&lt;br /&gt;
&lt;br /&gt;
::Un exemplo sería:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
TextureRegion texreg = new TextureRegion(textura);&lt;br /&gt;
texreg.flip(true, false);&lt;br /&gt;
spritebatch.draw(texreg,coche.getPosicion().x,coche.getPosicion().y,coche.getTamano().x,coche.getTamano().y);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; Lembrar que os new´s debe intentar evitarse dentro do render. É mellor ten un único new cando instanciemos a clase e chamar ó [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/TextureRegion.html#setRegion-com.badlogic.gdx.graphics.Texture- método setRegion] e asinarlle a textura que queiramos rotar.&lt;br /&gt;
&lt;br /&gt;
:* Utilizando o [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/SpriteBatch.html#draw-com.badlogic.gdx.graphics.Texture-float-float-float-float-int-int-int-int-boolean-boolean- método draw] clase SpriteBatch.&lt;br /&gt;
&lt;br /&gt;
:* Poñendo unha velocidade negativa. Desta forma os coches se moverán de dereita a esquerda. Pero temos que ter en conta que desta forma a posición &amp;#039;visual&amp;#039; dos coches / autobuses non coinciden coa posición &amp;#039;real&amp;#039; no noso mundo. O podemos comprobar se activamos o debuger na clase &amp;#039;&amp;#039;&amp;#039;RendererXogo&amp;#039;&amp;#039;&amp;#039; e debuxamos os coches.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase RendererXogo&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; Debuxar os coches que veñen de dereita a esquerda.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;13-19&amp;quot; &amp;gt;&lt;br /&gt;
	private void debuxarCoches(){&lt;br /&gt;
		Texture textura=null;&lt;br /&gt;
&lt;br /&gt;
		for (ElementoMobil coche : meumundo.getCoches()){&lt;br /&gt;
			switch(coche.getTipo()){&lt;br /&gt;
				case COCHE:&lt;br /&gt;
					textura = AssetsXogo.textureCoche;&lt;br /&gt;
					break;&lt;br /&gt;
				default:			&lt;br /&gt;
					textura = AssetsXogo.textureAutobus;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			if (coche.getVelocidade()&amp;lt;0){&lt;br /&gt;
				spritebatch.draw(textura,coche.getPosicion().x,coche.getPosicion().y,-coche.getTamano().x,coche.getTamano().y);&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				spritebatch.draw(textura,coche.getPosicion().x,coche.getPosicion().y,coche.getTamano().x,coche.getTamano().y);&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;
&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; &amp;gt;&lt;br /&gt;
    private void debugger(){&lt;br /&gt;
           &lt;br /&gt;
            shaperender.begin(ShapeType.Line);&lt;br /&gt;
            shaperender.setColor(Color.BLUE);&lt;br /&gt;
            for (ElementoMobil coche : meumundo.getCoches()){&lt;br /&gt;
                shaperender.rect(coche.getPosicion().x,coche.getPosicion().y,coche.getTamano().x,coche.getTamano().y);&lt;br /&gt;
            }&lt;br /&gt;
            shaperender.end();&lt;br /&gt;
           &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Dará como resultado isto:&lt;br /&gt;
[[Imagen:LIBGDX_UD2_8_mundo_2.jpg | center | 300px]]&lt;br /&gt;
&lt;br /&gt;
Para solucionalo só temos que desprazar o ancho do coche/autobús á súa posición.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase RendererXogo&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; Facer coincidir a posición real coa posición visual.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
	private void debuxarCoches(){&lt;br /&gt;
		Texture textura=null;&lt;br /&gt;
&lt;br /&gt;
		for (ElementoMobil coche : meumundo.getCoches()){&lt;br /&gt;
			switch(coche.getTipo()){&lt;br /&gt;
				case COCHE:&lt;br /&gt;
					textura = AssetsXogo.textureCoche;&lt;br /&gt;
					break;&lt;br /&gt;
				default:			&lt;br /&gt;
					textura = AssetsXogo.textureAutobus;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			if (coche.getVelocidade()&amp;lt;0){&lt;br /&gt;
				spritebatch.draw(textura,coche.getPosicion().x+coche.getTamano().x,coche.getPosicion().y,-coche.getTamano().x,coche.getTamano().y);&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				spritebatch.draw(textura,coche.getPosicion().x,coche.getPosicion().y,coche.getTamano().x,coche.getTamano().y);&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;
Fixarse como na liña 14 engadimos á posición do coche/autobús o seu tamaño.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;NOTA:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt;No desenvolvemento do xogo os alumnos poden escoller a solución que crean máis conveniente.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Engadimos agora a outra liña de coches que faltaba:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Mundo&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                 coches.add(new ElementoMobil(new Vector2(0,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(70,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(115,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(140,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(240,365),TAMANO_COCHES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.COCHE));&lt;br /&gt;
		 coches.add(new ElementoMobil(new Vector2(278,365),TAMANO_AUTOBUSES.cpy(),-65,ElementoMobil.TIPOS_ELEMENTOS.AUTOBUS));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loxicamente podedes engadir ou quitar coches para facelo máis fácil ou máis complicado :).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TAREFA 2.6 A FACER:&amp;#039;&amp;#039;&amp;#039; Esta parte está asociada á realización dunha tarefa.  &lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
==Os inimigos: Elementos móbiles parte II==&lt;br /&gt;
&lt;br /&gt;
Neste punto teredes movéndose os coches e as rochas polo voso xogo.&lt;br /&gt;
Agora imos facer unha pequena modificación que vai consistir en eliminar os elementos móbiles do array e volver a engadilos. Poderíamos engadilos nunha posición aleatoria para facelo máis complicado e tamén poderíamos modificar a velocidade. Quen quera facelo pode (xa comentado como solución alternativa na tarefa 2.6). Para facelo máis sinxelo na explicación que ven a continuación só imos traballar con tres troncos, un por cada fila.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O proceso é o mesmo que nos coches e rochas. Só temos que cambiar ó método da clase ControladorXogo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Mundo&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; creamos os troncos.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2,5-8,11-13&amp;quot; &amp;gt;&lt;br /&gt;
         ..............&lt;br /&gt;
	 private Array&amp;lt;ElementoMobil&amp;gt;troncos;&lt;br /&gt;
	 public Mundo(){&lt;br /&gt;
                 ..............&lt;br /&gt;
		 troncos = new Array&amp;lt;ElementoMobil&amp;gt;();&lt;br /&gt;
		 troncos.add(new ElementoMobil(new Vector2(100,220),TAMANO_TRONCO.cpy(),-50,ElementoMobil.TIPOS_ELEMENTOS.TRONCO));&lt;br /&gt;
		 troncos.add(new ElementoMobil(new Vector2(60,260),TAMANO_TRONCO.cpy(),40,ElementoMobil.TIPOS_ELEMENTOS.TRONCO));&lt;br /&gt;
		 troncos.add(new ElementoMobil(new Vector2(150,300),TAMANO_TRONCO.cpy(),-70,ElementoMobil.TIPOS_ELEMENTOS.TRONCO));&lt;br /&gt;
                 ..............&lt;br /&gt;
         }&lt;br /&gt;
	public Array&amp;lt;ElementoMobil&amp;gt; getTroncos() {&lt;br /&gt;
		return troncos;&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 RendererXogo&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; debuxamos os troncos.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2-7,24&amp;quot; &amp;gt;&lt;br /&gt;
         ..............&lt;br /&gt;
	private void debuxarTroncos(){&lt;br /&gt;
		for (ElementoMobil tronco : meumundo.getTroncos()){&lt;br /&gt;
			spritebatch.draw(AssetsXogo.textureTronco,tronco.getPosicion().x,tronco.getPosicion().y,tronco.getTamano().x,tronco.getTamano().y);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
         ..............&lt;br /&gt;
&lt;br /&gt;
         ..............&lt;br /&gt;
    public void render(float delta) {&lt;br /&gt;
		Gdx.gl.glClearColor(0, 0, 0, 1);&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
		spritebatch.begin();&lt;br /&gt;
		&lt;br /&gt;
			debuxarFondo();&lt;br /&gt;
		&lt;br /&gt;
			debuxarAlien();&lt;br /&gt;
			debuxarNave();&lt;br /&gt;
			&lt;br /&gt;
			debuxarCoches();&lt;br /&gt;
			debuxarRochas();&lt;br /&gt;
			debuxarTroncos();&lt;br /&gt;
			&lt;br /&gt;
		&lt;br /&gt;
		spritebatch.end();&lt;br /&gt;
                ..............&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora chega a diferenza que é eliminar os elementos do array na clase ControladorXogo cando as rochas cheguen os límites.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&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; actualiza e elimina/creo os troncos ó chegar ós limites.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2-16,24&amp;quot; &amp;gt;&lt;br /&gt;
        ...............&lt;br /&gt;
	private void controlarTroncos(float delta){&lt;br /&gt;
		for(ElementoMobil tronco: meuMundo.getTroncos()){&lt;br /&gt;
			tronco.update(delta);&lt;br /&gt;
			if (tronco.getPosicion().x&amp;lt;-Mundo.TAMANO_TRONCO.x){&lt;br /&gt;
				meuMundo.getTroncos().add(new ElementoMobil(new Vector2(MathUtils.random(Mundo.TAMANO_MUNDO_ANCHO, Mundo.TAMANO_MUNDO_ANCHO+Mundo.TAMANO_TRONCO.x),	tronco.getPosicion().y),Mundo.TAMANO_TRONCO.cpy(),tronco.getVelocidade(),ElementoMobil.TIPOS_ELEMENTOS.TRONCO));&lt;br /&gt;
				meuMundo.getTroncos().removeValue(tronco, true);&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			if (tronco.getPosicion().x&amp;gt;Mundo.TAMANO_MUNDO_ANCHO){&lt;br /&gt;
				meuMundo.getTroncos().add(new ElementoMobil(new Vector2(MathUtils.random(-2*Mundo.TAMANO_TRONCO.x,-Mundo.TAMANO_TRONCO.x),&lt;br /&gt;
							tronco.getPosicion().y),Mundo.TAMANO_TRONCO.cpy(),tronco.getVelocidade(),ElementoMobil.TIPOS_ELEMENTOS.TRONCO));&lt;br /&gt;
				meuMundo.getTroncos().removeValue(tronco, true);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
&lt;br /&gt;
		controlarCoches(delta);&lt;br /&gt;
		controlarRochas(delta);&lt;br /&gt;
		controlarTroncos(delta);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
        ...............&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comentamos o código:&lt;br /&gt;
*Liña 5: comprobamos se a rocha alcanza o límite (ven de dereita a esquerda).&lt;br /&gt;
*Liña 6: se é o caso, creamos unha nova rocha antes de eliminala xa que necesitamos darlle a posición Y que ten a rocha e tamén a velocidade. Neste exemplo non se xera unha velocidade aleatoria quedando como posible exercicio. Como se ve, cando fai o new da posición temos o seguinte código:&lt;br /&gt;
::new Vector2(MathUtils.random(Mundo.TAMANO_MUNDO_ANCHO, Mundo.TAMANO_MUNDO_ANCHO+Mundo.TAMANO_TRONCO.x)&lt;br /&gt;
:Isto xera un número aleatorio entre o tamano de mundo no ancho e o mesmo tamano máis o ancho do tronco. Desta forma xeramos unha posición aleatoria no eixe x.&lt;br /&gt;
*Liñas 10-12: o mesmo pero para o caso de que a rocha vaia de esquerda a dereita.&lt;br /&gt;
&lt;br /&gt;
Lembrade que xa vimos [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Movendo_os_graficos#Clase_Array:_Borrando_un_elemento_do_array como eliminar un elemento do array].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==A nave espacial==&lt;br /&gt;
&lt;br /&gt;
Chega o momento de mover a nosa nave.&lt;br /&gt;
&lt;br /&gt;
Como sempre, os pasos son:&lt;br /&gt;
&lt;br /&gt;
*Cargar a textura na clase AssetsXogo.&lt;br /&gt;
*Crear a clase que derive de Personaxe e que terá toda a información da nave. Chamarémoslle Nave.&lt;br /&gt;
*Crear o obxecto nave na clase Mundo e o método get asociado.&lt;br /&gt;
*Debuxar a nave na clase Renderer.&lt;br /&gt;
*Controlar a nave na clase ControladorXogo. Aquí imos facer unha pequena trampa (é optativo facelo) e vou pasar o código que fai que a nave se pare en cada plataforma á clase Nave ó seu método update.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Empecemos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;A primeira parte xa está feita da tarefa 2.3.&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Creamos a clase que deriva de Personaxe.&amp;lt;/u&amp;gt; O facemos no paquete modelo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Nave&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
public class Nave extends Personaxe {&lt;br /&gt;
&lt;br /&gt;
	public Nave(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		velocidade=velocidade_max;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
			setPosicion(getPosicion().x+delta*velocidade, getPosicion().y);&lt;br /&gt;
		&lt;br /&gt;
			// Se chega ó final do recorrido cambiamos de dirección&lt;br /&gt;
			if (posicion.x &amp;gt;=Mundo.TAMANO_MUNDO_ANCHO-getTamano().x){&lt;br /&gt;
				setPosicion(Mundo.TAMANO_MUNDO_ANCHO-getTamano().x,getPosicion().y);&lt;br /&gt;
				velocidade=-1*velocidade;&lt;br /&gt;
			} else if (posicion.x&amp;lt;=0) {&lt;br /&gt;
				setPosicion(0,getPosicion().y);&lt;br /&gt;
				velocidade=-1*velocidade;&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;
Varios comentarios:&lt;br /&gt;
&lt;br /&gt;
*Liña 5: a nave dende o comenzo está movéndose, polo que dende o principio ten unha velocidade.&lt;br /&gt;
*Liñas 13-19: cando a nave chega os límites temos que facer que se mova en dirección contraria. O conseguimos multiplicando por -1 a súa velocidade.&lt;br /&gt;
:Imaxinemos que a velocidade da nave é positiva, por exemplo 50. Isto quere dicir que a nave vai de esquerda a dereita. Cando chegue ó final da pantalla multiplicamos por -1 e teremos unha velocidade de -50 e se moverá de dereita a esquerda. O mesmo na outra dirección.&lt;br /&gt;
:Por que temos asinada unha posición nas liñas 14 e 17 ? Imaxinemos o caso que a nave vai de dereita a esquerda e chega a -0.8f. Lembrade que en cada iteración restamos delta * velocidade e case nunca vai dar 0 exacto. Por iso o límite sempre ten que estar feito con &amp;gt;= ou &amp;lt;=. Neste caso cambiaríamos de velocidade a positivo e imaxinemos que a nave se move a -0.3f. Como vemos segue sendo negativa e polo tanto volvería a entrar no if do límite alcanzado. Volvería a cambiar de velocidade e volvería a ir cara a esquerda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Crear o obxecto nave na clase Mundo e o método get asociado.&amp;lt;/u&amp;gt; Xa feito anteriormente (tarefa 2.4).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Debuxar a nave na clase Renderer.&amp;lt;/u&amp;gt; Xa feito anteriormente (tarefa 2.4).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Controlar a nave na clase ControladorXogo&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para mover a nave só temos que chamar ó método update.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase ControladorXogo&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; mover a nave.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2-4,12&amp;quot; &amp;gt;&lt;br /&gt;
        ..............&lt;br /&gt;
	private void controlarNave(float delta){&lt;br /&gt;
		meuMundo.getNave().update(delta);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
&lt;br /&gt;
		controlarCoches(delta);&lt;br /&gt;
		controlarRochas(delta);&lt;br /&gt;
		controlarTroncos(delta);&lt;br /&gt;
		&lt;br /&gt;
		controlarNave(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;
Podedes probar como a nave se move nos límites da pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora falta que a nave se quede parada, digamos 3 segundos en cada unha das plataformas.&lt;br /&gt;
Vos atrevedes a facelo ?&lt;br /&gt;
&lt;br /&gt;
Pistas:&lt;br /&gt;
*As posición en que debe parar a nave son: entre 33-35; entre 133-135; entre 227-229 (lembrar que non podemos poñer unha condición de &amp;#039;posición nave = 33&amp;#039; xa que nunca vai dar o número exacto.&lt;br /&gt;
*A idea é que cando a nave chegue a algunha destas posicións paremos a nave. Como ? Temos varias opcións, poñendo a velocidade a 0 ou utilizar unha variable booleana que indique cando debe estar parada. Cando a variable valga true facemos que non entre no código que que cambia a posición en función da velocidade.&lt;br /&gt;
*Cando saibamos que debe estar parada, poñeremos en marcha un cronómetro (utilizar delta) e cando chegue a 3 segundos (ou pode ir dende 3 a 0) debemos de cambiar a variable booleana para que xa se poda mover a nave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Posible solución:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Nave&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; facer que a nave se pare 3 segundos en cada plataforma.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;3,7,9,15-16,22-35&amp;quot; &amp;gt;&lt;br /&gt;
public class Nave extends Personaxe {&lt;br /&gt;
&lt;br /&gt;
	private final int TEMPO_MOVENDOSE=3;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Leva o tempo que está parado. Cando chegue a 0 volve a moverse.&lt;br /&gt;
	 */&lt;br /&gt;
	private float tempo;&lt;br /&gt;
	&lt;br /&gt;
	private boolean parado;&lt;br /&gt;
	&lt;br /&gt;
	public Nave(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		// TODO Auto-generated constructor stub&lt;br /&gt;
		velocidade=velocidade_max;&lt;br /&gt;
		parado=false;&lt;br /&gt;
		tempo=0;&lt;br /&gt;
	}&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;
		if ((posicion.x &amp;gt; 33 &amp;amp;&amp;amp; posicion.x &amp;lt; 35) ||&lt;br /&gt;
			(posicion.x &amp;gt; 133 &amp;amp;&amp;amp; posicion.x &amp;lt; 135) ||&lt;br /&gt;
			(posicion.x &amp;gt; 227 &amp;amp;&amp;amp; posicion.x &amp;lt; 229))&lt;br /&gt;
		{&lt;br /&gt;
			parado=true;&lt;br /&gt;
		}&lt;br /&gt;
		if (parado){&lt;br /&gt;
			tempo+=delta;&lt;br /&gt;
			if (tempo &amp;gt; TEMPO_MOVENDOSE){&lt;br /&gt;
				tempo=0;&lt;br /&gt;
				parado=false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if (!parado){&lt;br /&gt;
			setPosicion(getPosicion().x+delta*velocidade, getPosicion().y);&lt;br /&gt;
		&lt;br /&gt;
			// Se chega ó final do recorrido cambiamos de dirección&lt;br /&gt;
			if (posicion.x &amp;gt;=Mundo.TAMANO_MUNDO_ANCHO-getTamano().x){&lt;br /&gt;
				setPosicion(Mundo.TAMANO_MUNDO_ANCHO-getTamano().x,getPosicion().y);&lt;br /&gt;
				velocidade=-1*velocidade;&lt;br /&gt;
			} else if (posicion.x&amp;lt;=0) {&lt;br /&gt;
				setPosicion(0,getPosicion().y);&lt;br /&gt;
				velocidade=-1*velocidade;&lt;br /&gt;
			}&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;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>