<?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_As_colisions</id>
	<title>LIBGDX As colisions - 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_As_colisions"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_As_colisions&amp;action=history"/>
	<updated>2026-10-17T05:35:06Z</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_As_colisions&amp;diff=470&amp;oldid=prev</id>
		<title>Wiki en 22:40 9 dic 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_As_colisions&amp;diff=470&amp;oldid=prev"/>
		<updated>2015-12-09T22:40:30Z</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 22:40 9 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-l5&quot; &gt;Línea 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 5:&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 detectar o choque imos utilizar a clase Intersector. Os método de dita clase van devolver un booleano que vai indicar se se produce algunha intersección entre dúas figuras xeométricas.  &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 detectar o choque imos utilizar a clase Intersector. Os método de dita clase van devolver un booleano que vai indicar se se produce algunha intersección entre dúas figuras xeométricas.  &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;Tamén pode comprobar se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [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_Vector_direccion vector dirección]) choca cun plano ou figura xeométrica así como calcular distancias entre puntos ou puntos e figuras xeométricas.&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;Tamén pode comprobar se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;mediawiki&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_Vector_direccion vector dirección]) choca cun plano ou figura xeométrica así como calcular distancias entre puntos ou puntos e figuras xeométricas.&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;&amp;lt;br/&amp;gt;&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;&amp;lt;br/&amp;gt;&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;&amp;lt;br/&amp;gt;&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;&amp;lt;br/&amp;gt;&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-l20&quot; &gt;Línea 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 20:&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;:::Devolve a distancia entre unha liña e un punto. Os parámetros que se dan a este método serían a liña, definida por catro coordenadas e un punto, definido por dous coordenadas. Está sobrecargado.&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;:::Devolve a distancia entre unha liña e un punto. Os parámetros que se dan a este método serían a liña, definida por catro coordenadas e un punto, definido por dous coordenadas. Está sobrecargado.&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;::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#intersectRayBoundsFast-com.badlogic.gdx.math.collision.Ray-com.badlogic.gdx.math.collision.BoundingBox- static boolean intersectRayBoundsFast(Ray ray, BoundingBox box)]&amp;#039;&amp;#039;&amp;#039;&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;::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#intersectRayBoundsFast-com.badlogic.gdx.math.collision.Ray-com.badlogic.gdx.math.collision.BoundingBox- static boolean intersectRayBoundsFast(Ray ray, BoundingBox box)]&amp;#039;&amp;#039;&amp;#039;&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;:::Comproba se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [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_Vector_direccion vector dirección]) intersecciona cun [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/BoundingBox.html BoundingBox] (unha figura xeométrica en forma de cubo ou prima. O veremos na parte 3D).&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;:::Comproba se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;mediawiki&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_Vector_direccion vector dirección]) intersecciona cun [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/BoundingBox.html BoundingBox] (unha figura xeométrica en forma de cubo ou prima. O veremos na parte 3D).&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;::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Circle- static boolean overlaps(Circle c1, Circle c2) )]&amp;#039;&amp;#039;&amp;#039;&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;::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Circle- static boolean overlaps(Circle c1, Circle c2) )]&amp;#039;&amp;#039;&amp;#039;&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;:::Devolve true ou false dependendo se os dous círculos indicados se solapan.&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;:::Devolve true ou false dependendo se os dous círculos indicados se solapan.&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-l187&quot; &gt;Línea 187:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 187:&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ña 5: comproba se se pulsa a pantalla.&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ña 5: comproba se se pulsa a pantalla.&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;*LIñas 6-7: obtén a coordenada en &amp;#039;&amp;#039;&amp;#039;pixeles de pantalla&amp;#039;&amp;#039;&amp;#039; da última posición.&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 6-7: obtén a coordenada en &amp;#039;&amp;#039;&amp;#039;pixeles de pantalla&amp;#039;&amp;#039;&amp;#039; da última posición.&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;*Liñas 9-10: pasa de coordenadas de pantalla a coordenadas do noso mundo. [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_A_c%C3%A1mara_2D#Proxectando_os_puntos Xa visto anteriormente].&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;*Liñas 9-10: pasa de coordenadas de pantalla a coordenadas do noso mundo. [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;mediawiki&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_A_c%C3%A1mara_2D#Proxectando_os_puntos Xa visto anteriormente].&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;*Liñas 12-13: obtén o alien e o move á posición pulsada.&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 12-13: obtén o alien e o move á posición pulsada.&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;*Liña 14: crea un rectángulo coa posición e o tamaño do alien.&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ña 14: crea un rectángulo coa posición e o tamaño do alien.&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-l198&quot; &gt;Línea 198:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 198:&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;&amp;lt;br/&amp;gt;&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;&amp;lt;br/&amp;gt;&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;&amp;#039;&amp;#039;&amp;#039;Recomendación:&amp;#039;&amp;#039;&amp;#039; No caso de xestionar controis de movemento, como frechas de tipo arriba-abaixo-esquerda-dereita, se pode utilizar a [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_Anexo_tipos_de_datos#Circle clase Circle] para representar o dedo pulsado na pantalla e usar o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Rectangle- static boolean overlaps(Circle c, Rectangle r)] para comprobar se se premeu a frecha.&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;&amp;#039;&amp;#039;&amp;#039;Recomendación:&amp;#039;&amp;#039;&amp;#039; No caso de xestionar controis de movemento, como frechas de tipo arriba-abaixo-esquerda-dereita, se pode utilizar a [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;mediawiki&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_Anexo_tipos_de_datos#Circle clase Circle] para representar o dedo pulsado na pantalla e usar o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Rectangle- static boolean overlaps(Circle c, Rectangle r)] para comprobar se se premeu a frecha.&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_As_colisions&amp;diff=468&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 2: As colisións&lt;/span&gt;  ===Introducción===  Para detectar o choque imos utilizar a clase Intersector. Os método de dita clase van d...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_As_colisions&amp;diff=468&amp;oldid=prev"/>
		<updated>2015-12-09T22:37:13Z</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: As colisións&amp;lt;/span&amp;gt;  ===Introducción===  Para detectar o choque imos utilizar a clase Intersector. Os método de dita clase van d...»&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: As colisións&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Introducción===&lt;br /&gt;
&lt;br /&gt;
Para detectar o choque imos utilizar a clase Intersector. Os método de dita clase van devolver un booleano que vai indicar se se produce algunha intersección entre dúas figuras xeométricas. &lt;br /&gt;
&lt;br /&gt;
Tamén pode comprobar se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Vector_direccion vector dirección]) choca cun plano ou figura xeométrica así como calcular distancias entre puntos ou puntos e figuras xeométricas.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Importante:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; Non é necesario instanciar a clase Intersector. Todos os seus métodos son de clase e polo tanto para chamar a calquera deles só é necesario facer &amp;#039;&amp;#039;Intersector.nomeDoMétodo&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
===Como funciona a clase Intersector===&lt;br /&gt;
*Clase &amp;#039;&amp;#039;&amp;#039;Intersector&amp;#039;&amp;#039;&amp;#039;: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html&lt;br /&gt;
&lt;br /&gt;
:Algúns dos métodos que nos ofrece:&lt;br /&gt;
:Dita clase ten multitude de métodos que son fáciles de entender xa polo seu nome...&lt;br /&gt;
&lt;br /&gt;
::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#distanceLinePoint-float-float-float-float-float-float- static float distanceLinePoint(float startX, float startY, float endX, float endY, float pointX, float pointY)]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:::Devolve a distancia entre unha liña e un punto. Os parámetros que se dan a este método serían a liña, definida por catro coordenadas e un punto, definido por dous coordenadas. Está sobrecargado.&lt;br /&gt;
::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#intersectRayBoundsFast-com.badlogic.gdx.math.collision.Ray-com.badlogic.gdx.math.collision.BoundingBox- static boolean intersectRayBoundsFast(Ray ray, BoundingBox box)]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:::Comproba se un [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html raio] (un punto cun [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Vector_direccion vector dirección]) intersecciona cun [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/BoundingBox.html BoundingBox] (unha figura xeométrica en forma de cubo ou prima. O veremos na parte 3D).&lt;br /&gt;
::*&amp;#039;&amp;#039;&amp;#039;[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Circle- static boolean overlaps(Circle c1, Circle c2) )]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:::Devolve true ou false dependendo se os dous círculos indicados se solapan.&lt;br /&gt;
:::Está sobrecargado e temos métodos que:&lt;br /&gt;
:::*[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Rectangle- static boolean overlaps(Circle c, Rectangle r)]: se un círculo se solapa cun rectángulo.&lt;br /&gt;
:::*[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Rectangle-com.badlogic.gdx.math.Rectangle- static boolean overlaps(Rectangle r1, Rectangle r2)]: se un rectángulo se solapa con outro rectángulo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un exemplo...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Agora ides facer unha copia da clase RendererXogo, xa que imos modificala para amosarvos como se poden controlar os choques. Premede co rato sobre a clase, botón dereito e escollede a opción Copy. Despois repetides a operación pero escolledes a opción Paste. Vos preguntará un nome para a clase. Indicade &amp;#039;&amp;#039;&amp;#039;UD2_5_RendererXogo&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Modificade a pantalla PantallaXogo para que chame a esta clase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase UD2_5_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 que o alien se mova co dedo e comprobar cando choca coa nave espacial.&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.renderer;&lt;br /&gt;
&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.graphics.Color;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.OrthographicCamera;&lt;br /&gt;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;&lt;br /&gt;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;&lt;br /&gt;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;&lt;br /&gt;
import com.badlogic.gdx.math.Circle;&lt;br /&gt;
import com.badlogic.gdx.math.Intersector;&lt;br /&gt;
import com.badlogic.gdx.math.Rectangle;&lt;br /&gt;
import com.badlogic.gdx.math.Vector3;&lt;br /&gt;
import com.plategaxogo2d.angel.AssetsXogo;&lt;br /&gt;
import com.plategaxogo2d.angel.Controis;&lt;br /&gt;
import com.plategaxogo2d.angel.Utiles;&lt;br /&gt;
import com.plategaxogo2d.modelo.Alien;&lt;br /&gt;
import com.plategaxogo2d.modelo.Mundo;&lt;br /&gt;
import com.plategaxogo2d.modelo.Nave;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Comprobamos como funciona a clase Intersector.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class UD2_5_RendererXogo {&lt;br /&gt;
&lt;br /&gt;
    private OrthographicCamera camara2d;&lt;br /&gt;
    private SpriteBatch spritebatch;&lt;br /&gt;
    private ShapeRenderer shaperender;&lt;br /&gt;
&lt;br /&gt;
	private Mundo meuMundo;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public UD2_5_RendererXogo(Mundo mundo) {&lt;br /&gt;
		this.meuMundo = mundo;&lt;br /&gt;
&lt;br /&gt;
    	camara2d = new OrthographicCamera();&lt;br /&gt;
        spritebatch = new SpriteBatch();&lt;br /&gt;
        shaperender = new ShapeRenderer();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
	private void debuxarAlien(){&lt;br /&gt;
		Alien alien = meuMundo.getAlien();&lt;br /&gt;
		spritebatch.draw(AssetsXogo.textureAlien, alien.getPosicion().x,alien.getPosicion().y,alien.getTamano().x,alien.getTamano().y);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private void debuxarNave(){&lt;br /&gt;
		Nave nave = meuMundo.getNave();&lt;br /&gt;
		spritebatch.draw(AssetsXogo.textureNave, nave.getPosicion().x,nave.getPosicion().y,nave.getTamano().x,nave.getTamano().y);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
    /**&lt;br /&gt;
     * Debuxa todos os elementos graficos da pantalla&lt;br /&gt;
     *&lt;br /&gt;
     * @param delta&lt;br /&gt;
     *            : tempo que pasa entre un frame e o seguinte.&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;
			debuxarNave();&lt;br /&gt;
			&lt;br /&gt;
			debuxarAlien();&lt;br /&gt;
&lt;br /&gt;
		spritebatch.end();&lt;br /&gt;
		&lt;br /&gt;
		debugger();&lt;br /&gt;
		&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	private void debugger(){&lt;br /&gt;
		&lt;br /&gt;
		shaperender.begin(ShapeType.Line);&lt;br /&gt;
		shaperender.setColor(Color.YELLOW);&lt;br /&gt;
&lt;br /&gt;
		Alien alien = meuMundo.getAlien(); &lt;br /&gt;
		shaperender.rect(alien.getPosicion().x, alien.getPosicion().y, alien.getTamano().x, alien.getTamano().y);&lt;br /&gt;
		&lt;br /&gt;
		shaperender.setColor(Color.RED);&lt;br /&gt;
		Nave nave = meuMundo.getNave();&lt;br /&gt;
		shaperender.rect(nave.getPosicion().x, nave.getPosicion().y, nave.getTamano().x, nave.getTamano().y);&lt;br /&gt;
		&lt;br /&gt;
		shaperender.end();&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void resize(int width, int height) {&lt;br /&gt;
&lt;br /&gt;
		camara2d.setToOrtho(false, Mundo.TAMANO_MUNDO_ANCHO,&lt;br /&gt;
				Mundo.TAMANO_MUNDO_ALTO);&lt;br /&gt;
		camara2d.update();&lt;br /&gt;
&lt;br /&gt;
		spritebatch.setProjectionMatrix(camara2d.combined);&lt;br /&gt;
		shaperender.setProjectionMatrix(camara2d.combined);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void dispose() {&lt;br /&gt;
            spritebatch.dispose();&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;
&lt;br /&gt;
Agora, por simplificar, non imos usar a interface InputProcessor e imos chamar directamente a métodos do paquete Gdx.input que nos van devolver a última coordenada pulsada na pantalla.&lt;br /&gt;
&amp;#039;&amp;#039;Modificamos o método render e poñemos este código&amp;#039;&amp;#039;.&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;
    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;
		if (Gdx.input.justTouched()){&lt;br /&gt;
			float posx=Gdx.input.getX();&lt;br /&gt;
			float posy = Gdx.input.getY();&lt;br /&gt;
			&lt;br /&gt;
			Vector3 dedo = new Vector3(posx,posy,0);&lt;br /&gt;
			camara2d.unproject(dedo);&lt;br /&gt;
			&lt;br /&gt;
			Alien alien = meuMundo.getAlien(); &lt;br /&gt;
			alien.setPosicion(dedo.x,dedo.y);&lt;br /&gt;
			Rectangle rectangulo_alien = new Rectangle(alien.getPosicion().x,alien.getPosicion().y,&lt;br /&gt;
					alien.getTamano().x,alien.getTamano().y);&lt;br /&gt;
			&lt;br /&gt;
			Nave nave = meuMundo.getNave();&lt;br /&gt;
			Rectangle rectangulo_nave = new Rectangle(nave.getPosicion().x,nave.getPosicion().y,&lt;br /&gt;
												 nave.getTamano().x,nave.getTamano().y);&lt;br /&gt;
			&lt;br /&gt;
			if (Intersector.overlaps(rectangulo_alien, rectangulo_nave)){&lt;br /&gt;
				Utiles.imprimirLog(&amp;quot;UD2_5_RendererXogo&amp;quot;, &amp;quot;RENDER&amp;quot;, &amp;quot;CHOCA CON NAVE&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comentarios:&lt;br /&gt;
*Liña 5: comproba se se pulsa a pantalla.&lt;br /&gt;
*LIñas 6-7: obtén a coordenada en &amp;#039;&amp;#039;&amp;#039;pixeles de pantalla&amp;#039;&amp;#039;&amp;#039; da última posición.&lt;br /&gt;
*Liñas 9-10: pasa de coordenadas de pantalla a coordenadas do noso mundo. [http://manuais.iessanclemente.net/index.php?title=LIBGDX_A_c%C3%A1mara_2D#Proxectando_os_puntos Xa visto anteriormente].&lt;br /&gt;
*Liñas 12-13: obtén o alien e o move á posición pulsada.&lt;br /&gt;
*Liña 14: crea un rectángulo coa posición e o tamaño do alien.&lt;br /&gt;
*Liñas 17-19: obtén a nave e crea un rectángulo coa posición e o tamaño.&lt;br /&gt;
*Liñas 21-23: comproba se os dous rectángulos &amp;#039;chocan&amp;#039; e manda unha mensaxe en caso afirmativo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercicio proposto:&amp;#039;&amp;#039;&amp;#039; poderíamos mover o Alien co dedo. Teríamos que utilizar a interface InputProcessor, ir ó evento adecuado e comprobar se estamos enriba do alien para facer que se move ás coordenadas indicadas polo evento (pasadas previamente a coordenadas do noso mundo).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Recomendación:&amp;#039;&amp;#039;&amp;#039; No caso de xestionar controis de movemento, como frechas de tipo arriba-abaixo-esquerda-dereita, se pode utilizar a [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Anexo_tipos_de_datos#Circle clase Circle] para representar o dedo pulsado na pantalla e usar o método [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html#overlaps-com.badlogic.gdx.math.Circle-com.badlogic.gdx.math.Rectangle- static boolean overlaps(Circle c, Rectangle r)] para comprobar se se premeu a frecha.&lt;br /&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; Volvede a facer que a clase PantallaXogo chame á clase RendererXogo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TAREFA 2.8.B 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;
===Facer que o Alien se mova cos elementos móbiles===&lt;br /&gt;
&lt;br /&gt;
Despois de facer a tarefa 2.8 xa controlades ó Alien. Imos facer que cando pase por enriba dun elemento móbil o Alien se mova con él.&lt;br /&gt;
&lt;br /&gt;
Seríades capaces de facelo ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Como ven pensades temos que poñer o código na clase ControladorXogo e o imos facer no método controlarAlien de dita clase.&lt;br /&gt;
&lt;br /&gt;
Agora temos que pensar se imos necesitar gardar algún valor novo para controlar este estado.&lt;br /&gt;
&lt;br /&gt;
Unha posible solución pode ser a de gardar unha velocidade que se lle sume á velocidade que ten o propio alien. Dita velocidade se modifica en función de se sube a un elemento móbil. Agora xa sabemos como controlar cando o alien intersecciona cun elemento móbil.&lt;br /&gt;
&lt;br /&gt;
Mans a obra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; eu vos dou unha posible solución pero cada un pode facelo como queira.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Alien&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; engadimos un campo novo de nome velocidadeMontado. Sumámoslle á velocidade do alien dito valor que será modificado cando o alien suba a un elemento móbil.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1,7,10-16,19&amp;quot; &amp;gt;&lt;br /&gt;
	private float velocidadeMontado;&lt;br /&gt;
        ...........&lt;br /&gt;
	public Alien(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
&lt;br /&gt;
	        velocidade = new Vector2(0,0);&lt;br /&gt;
		setVelocidade_montado(0);&lt;br /&gt;
         }&lt;br /&gt;
         ...........&lt;br /&gt;
  	public float getVelocidade_montado() {&lt;br /&gt;
		return velocidadeMontado;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setVelocidade_montado(float velocidade_montado) {&lt;br /&gt;
		this.velocidadeMontado = velocidade_montado;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void update(float delta){&lt;br /&gt;
	     setPosicion(getPosicion().x+(velocidade.x+velocidadeMontado)*delta,&lt;br /&gt;
                         getPosicion().y+velocidade.y*delta);&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;
Agora só queda modificar dito valor e darlle a velocidade do elemento móbil cando estea enriba del.&lt;br /&gt;
Pero antes de facer isto imos a refinar un pouco o código. Se intentamos facer isto sen máis imos ter que crear dous rectángulos e darlles a posición do alien e a posición de cada un dos elementos móbiles, chamando á clase Intersector para comprobar se se tocan.&lt;br /&gt;
&lt;br /&gt;
En vez disto, podemos modificar a clase Personaxe e crear unha propiedade rectángulo que se modifique cando se cambie de posición (o tamaño do rectángulo non varía). &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Personaxe&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 unha propiedade &amp;#039;&amp;#039;&amp;#039;rectangulo&amp;#039;&amp;#039;&amp;#039; de tipo Rectangle que vai gardar a posición actual e o tamaño do Personaxe. Usado pola clase Intersector.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1,5,11,18,22-25,27-42,46,58,67,72&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.math.Rectangle;&lt;br /&gt;
...........&lt;br /&gt;
public abstract class Personaxe {&lt;br /&gt;
	&lt;br /&gt;
	private Rectangle rectangulo;&lt;br /&gt;
&lt;br /&gt;
        /**&lt;br /&gt;
          * Constructor por defecto&lt;br /&gt;
        */&lt;br /&gt;
	public Personaxe(){&lt;br /&gt;
		rectangulo = new Rectangle();&lt;br /&gt;
	}&lt;br /&gt;
	public Personaxe(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		this.posicion = posicion;&lt;br /&gt;
		this.tamano = tamano;&lt;br /&gt;
		this.velocidade_max = velocidade_max;&lt;br /&gt;
		&lt;br /&gt;
		rectangulo = new Rectangle(posicion.x,posicion.y,tamano.x,tamano.y);&lt;br /&gt;
	}&lt;br /&gt;
        ...........&lt;br /&gt;
&lt;br /&gt;
	public void setTamanoRectangulo(float width,float height){&lt;br /&gt;
		rectangulo.setWidth(width);&lt;br /&gt;
		rectangulo.setHeight(height);&lt;br /&gt;
	}&lt;br /&gt;
        ...........&lt;br /&gt;
	/**&lt;br /&gt;
	 * Actualiza a posición do rectángulo asociado á forma do gráfico&lt;br /&gt;
	 * &lt;br /&gt;
	 */&lt;br /&gt;
	public void actualizarRectangulo(){&lt;br /&gt;
		rectangulo.x=posicion.x;&lt;br /&gt;
		rectangulo.y=posicion.y;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Devolve o rectángulo asociado&lt;br /&gt;
	 * @return rectangulo&lt;br /&gt;
	 */&lt;br /&gt;
	public Rectangle getRectangulo(){&lt;br /&gt;
		return rectangulo;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
        public void setPosicion(Vector2 posicion) {&lt;br /&gt;
            this.posicion = posicion;&lt;br /&gt;
    	    actualizarRectangulo();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
       /**&lt;br /&gt;
        * Modifica a posición&lt;br /&gt;
        *&lt;br /&gt;
        * @param x: nova posición x&lt;br /&gt;
        * @param y: nova posición y&lt;br /&gt;
        */&lt;br /&gt;
        public void setPosicion(float x, float y) {&lt;br /&gt;
            posicion.x = x;&lt;br /&gt;
            posicion.y = y;&lt;br /&gt;
	    actualizarRectangulo();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Asina un novo tamano&lt;br /&gt;
	 * @param tamano: o novo tamano.&lt;br /&gt;
	 */&lt;br /&gt;
	public void setTamano(Vector2 tamano) {&lt;br /&gt;
		this.tamano=tamano;&lt;br /&gt;
		setTamanoRectangulo(tamano.x,tamano.y);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void setTamano(float width, float height) {&lt;br /&gt;
		this.tamano.set(width,height);&lt;br /&gt;
		setTamanoRectangulo(width, height);&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;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;NOTA IMPORTANTE:&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt; O método update das clases que derivan da clase Personaxes (como ElementoMobil) debe chamar ó método setPosicion() para moverse:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;28-39&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
        // TODO Auto-generated method stub&lt;br /&gt;
	       setPosicion(posicion.add(velocidade*delta,0));&lt;br /&gt;
     	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NON DEBEMOS FACER ASI:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;28-39&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void update(float delta) {&lt;br /&gt;
         // TODO Auto-generated method stub&lt;br /&gt;
	    posicion.add((velocidade*delta),0);&lt;br /&gt;
     	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora só queda modifica a clase controladorXogo para ver cando coinciden e modificar a velocidadeMontado do alien.&lt;br /&gt;
&amp;lt;b&amp;gt;Exercicio proposto:&amp;lt;/b&amp;gt; Intentádeo facelo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Posible solución:&amp;lt;/b&amp;gt;&lt;br /&gt;
&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; Modificamos o método controlarAlien para controlar cando chocan os rectángulos do alien cos dos elementos móbiles.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;28-39&amp;quot; &amp;gt;&lt;br /&gt;
	private void controlarAlien(float delta){&lt;br /&gt;
		&lt;br /&gt;
		// Actualiza Alien&lt;br /&gt;
		alien.update(delta);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		// Impide que se mova fora dos límites da pantalla&lt;br /&gt;
		if (alien.getPosicion().x &amp;lt;=0){&lt;br /&gt;
			alien.setPosicion(0, alien.getPosicion().y);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (alien.getPosicion().x &amp;gt;= Mundo.TAMANO_MUNDO_ANCHO-alien.getTamano().x){&lt;br /&gt;
				alien.setPosicion(Mundo.TAMANO_MUNDO_ANCHO-alien.getTamano().x, alien.getPosicion().y);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if (alien.getPosicion().y &amp;lt;=Controis.FONDO_NEGRO.height){&lt;br /&gt;
			alien.setPosicion(alien.getPosicion().x,Controis.FONDO_NEGRO.height);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (alien.getPosicion().y &amp;gt;= Mundo.TAMANO_MUNDO_ALTO-alien.getTamano().y){&lt;br /&gt;
				alien.setPosicion(alien.getPosicion().x, Mundo.TAMANO_MUNDO_ALTO-alien.getTamano().y);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Controla que suba enriba dun elemento móvil&lt;br /&gt;
		alien.setVelocidade_montado(0);&lt;br /&gt;
		for (ElementoMobil elem : meuMundo.getRochas()){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), alien.getRectangulo())){&lt;br /&gt;
				alien.setVelocidade_montado(elem.getVelocidade());&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		for (ElementoMobil elem : meuMundo.getTroncos()){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), alien.getRectangulo())){&lt;br /&gt;
				alien.setVelocidade_montado(elem.getVelocidade());&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;
Se vos fixades e xogades, o alien ten o rectángulo asociado demasiado grande e iso fai que teñamos este efecto:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD2_10_colision_1.jpg | 300px | center]]&lt;br /&gt;
&lt;br /&gt;
Como podedes observar o alien está pegado á rocha e é arrastrado.&lt;br /&gt;
&lt;br /&gt;
Para solucionalo podemos facer que o rectángulo do alien sexa máis pequeno (a mitade) pero tamén temos que sobreescribir o método que actualiza o rectángulo xa que o queremos centrado (se non tería a metade de tamaño pero estaría situado abaixo á esquerda.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Alien&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; axustar o tamaño e posición do rectángulo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9,12-18&amp;quot; &amp;gt;&lt;br /&gt;
public class Alien extends Personaxe {&lt;br /&gt;
&lt;br /&gt;
	public Alien(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		&lt;br /&gt;
		velocidade = new Vector2(0,0);&lt;br /&gt;
		setVelocidade_montado(0);&lt;br /&gt;
&lt;br /&gt;
		getRectangulo().setSize(tamano.x/2);&lt;br /&gt;
	}&lt;br /&gt;
        ..............&lt;br /&gt;
	@Override&lt;br /&gt;
	public void actualizarRectangulo(){&lt;br /&gt;
&lt;br /&gt;
		getRectangulo().x = getPosicion().x+getTamano().x/4;&lt;br /&gt;
		getRectangulo().y = getPosicion().y+getTamano().y/4;&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;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Controlar os choques dos coches có Alien===&lt;br /&gt;
&lt;br /&gt;
Controlar isto xa non ten problema ningún.&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; Xestionar os choques cos coches.&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;
	private void controlarAlien(float delta){&lt;br /&gt;
                ............&lt;br /&gt;
&lt;br /&gt;
		// Controla se lle colle un vehículo&lt;br /&gt;
		for (ElementoMobil elem : meuMundo.getCoches()){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), alien.getRectangulo())){&lt;br /&gt;
                                 // ALIEN MORTO&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;
===Controlar cando o alien cae na lava ou na auga===&lt;br /&gt;
&lt;br /&gt;
Igual que fixemos antes a solución é bastante sinxela. O único complicado é descubrir as coordenadas e tamaño da auga e lava.&lt;br /&gt;
&lt;br /&gt;
Podemos crear un array de zonas perigosas e comprobar se está dentro dunha delas. Tamén temos que definir as zonas seguras, xa que no lugar onde está a nave hai unhas pasarelas que son seguras e teremos que definilas.&lt;br /&gt;
A definición de ditas zonas a podemos ter na clase Mundo utilizando un array de Rectangles.&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; definimos nun array de Rectangle as zonas perigosas e seguras.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Estas zonas están definidas para un tamaño de mundo de 300 por 500.&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 static final Rectangle ZONAS_PERIGOSAS[]={new Rectangle(0,40,300,120),new Rectangle(0,220,300,120), new Rectangle(0,420,300,80)};&lt;br /&gt;
    public static final Rectangle ZONAS_SEGURAS[]={new Rectangle(40,420,20,60),new Rectangle(140,420,20,60), new Rectangle(240,420,20,60)};  // AS PLATAFORMAS QUE ESTAN ENRIBA DA LAVA.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora só temos que controlar se o alien pisa algunha delas, &amp;#039;&amp;#039;&amp;#039;PERO.......&amp;#039;&amp;#039;&amp;#039; temos que ter en conta cando está enriba dun tronco ou rocha para que non comprobe as zonas. Como podemos sabelo ? Pois mirando o valor da velocidade_montado do alien que cando está enriba dun tronco ou rocha ten un valor diferente a 0.&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; verificar se o alien está nunha zona segura ou perigosa.&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 controlarAlien(float delta){&lt;br /&gt;
                ..............&lt;br /&gt;
&lt;br /&gt;
		// Controla se cae a auga ou lava&lt;br /&gt;
		if (alien.getVelocidade_montado()==0){&lt;br /&gt;
			boolean seguro=false;&lt;br /&gt;
			// Se está nunha zona segura xa non mira as perigosas&lt;br /&gt;
			for(int cont=0; cont &amp;lt; Mundo.ZONAS_SEGURAS.length;cont++){&lt;br /&gt;
				if (Intersector.overlaps(Mundo.ZONAS_SEGURAS[cont], alien.getRectangulo())){&lt;br /&gt;
					seguro=true;&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (!seguro){&lt;br /&gt;
				for(int cont=0; cont &amp;lt; Mundo.ZONAS_PERIGOSAS.length;cont++){&lt;br /&gt;
					if (Intersector.overlaps(Mundo.ZONAS_PERIGOSAS[cont], alien.getRectangulo())){&lt;br /&gt;
						// ALIEN MORRE&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;
===Avanzando no noso xogo===&lt;br /&gt;
Relacionados con a xestión de atropellos, lava e auga :) imos xestionar as vidas salvadas/perdidas do alien. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Unha proposta de solución:&amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
A idea e ter nun array as vidas salvadas e mortas e debuxalas na parte inferior da pantalla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Exercicio proposto:&amp;lt;/b&amp;gt; facer o anterior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Posible solución:&amp;lt;/b&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Como sempre temos que pensar que información imos necesitar para engadir esta funcionalidade e onde gardala.&lt;br /&gt;
&lt;br /&gt;
No noso caso dita información será gardada na clase Alien.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Alien&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; xestionar as vidas salvadas / perdidas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1,5-6,16,19-34&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.utils.Array;&lt;br /&gt;
..........&lt;br /&gt;
public class Alien extends Personaxe {&lt;br /&gt;
&lt;br /&gt;
	public static enum TIPOS_VIDA{INICIAL,SALVADO,MUERTO};&lt;br /&gt;
	private Array&amp;lt;TIPOS_VIDA&amp;gt;numVidas;&lt;br /&gt;
        ...............&lt;br /&gt;
	public Alien(Vector2 posicion, Vector2 tamano, float velocidade_max) {&lt;br /&gt;
		super(posicion, tamano, velocidade_max);&lt;br /&gt;
		&lt;br /&gt;
		velocidade = new Vector2(0,0);&lt;br /&gt;
		setVelocidade_montado(0);&lt;br /&gt;
&lt;br /&gt;
		getRectangulo().setSize(tamano.x/2);&lt;br /&gt;
&lt;br /&gt;
		numVidas = new Array&amp;lt;Alien.TIPOS_VIDA&amp;gt;();&lt;br /&gt;
	}&lt;br /&gt;
        ...............&lt;br /&gt;
	public Array&amp;lt;TIPOS_VIDA&amp;gt; getNumVidas() {&lt;br /&gt;
		return numVidas;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setNumVidas(TIPOS_VIDA vida) {&lt;br /&gt;
		numVidas.add(vida);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public int getNumVidasSalvadas(){&lt;br /&gt;
		int num=0;&lt;br /&gt;
		for (TIPOS_VIDA vida : numVidas){&lt;br /&gt;
			if (vida == TIPOS_VIDA.SALVADO) num++;&lt;br /&gt;
	        }&lt;br /&gt;
		&lt;br /&gt;
		return num;&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 debuxar as vidas....como imos debuxalas nunha posición da pantalla podemos gardar dita posición na clase Controis.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Controis&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; Gardar a posición onde se debuxan as vidas.&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 final static int POSVIDAS = 60;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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;
&lt;br /&gt;
Agora debuxamos as vidas na posición indicada na clase RendererXogo.&amp;lt;br/&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 as vidas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2-16,35&amp;quot; &amp;gt;&lt;br /&gt;
        .............. &lt;br /&gt;
	private void debuxarVidas(){&lt;br /&gt;
		Texture textura;&lt;br /&gt;
		int posx=Controis.POSVIDAS;&lt;br /&gt;
		for(Alien.TIPOS_VIDA vida : meuMundo.getAlien().getNumVidas()){&lt;br /&gt;
			if(vida == Alien.TIPOS_VIDA.MUERTO)&lt;br /&gt;
				textura = AssetsXogo.textureAlienDead;&lt;br /&gt;
			else if(vida == Alien.TIPOS_VIDA.SALVADO)&lt;br /&gt;
					textura = AssetsXogo.textureAlienRescue;&lt;br /&gt;
			else&lt;br /&gt;
				textura = AssetsXogo.textureAlien;&lt;br /&gt;
&lt;br /&gt;
			spritebatch.draw(textura,posx,0,10,10);&lt;br /&gt;
			posx+=12;&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;
			debuxarNave();&lt;br /&gt;
			&lt;br /&gt;
			debuxarCoches();&lt;br /&gt;
			debuxarRochas();&lt;br /&gt;
			debuxarTroncos();&lt;br /&gt;
			&lt;br /&gt;
			debuxarAlien();&lt;br /&gt;
&lt;br /&gt;
			debuxarControis();&lt;br /&gt;
			debuxarVidas();&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt; É importante a orde de debuxo xa que se chamamos a debuxarVidas antes que a debuxarControis, o punto negro que conforma a banda inferior tapará as vidas.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
E por último temos que modificar á clase ControladorXogo para engadir á vida / morte ó array de vidas en función de se chegamos á nave ou morremos polo camiño...&lt;br /&gt;
&amp;lt;br/&amp;gt;&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; Xestionar as vidas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7,24&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	private void controlarAlien(float delta){&lt;br /&gt;
                ............&lt;br /&gt;
&lt;br /&gt;
		// Controla se lle colle un vehículo&lt;br /&gt;
		for (ElementoMobil elem : meuMundo.getCoches()){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), alien.getRectangulo())){&lt;br /&gt;
				alien.setNumVidas(TIPOS_VIDA.MUERTO);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Controla se cae a auga ou lava&lt;br /&gt;
		if (alien.getVelocidade_montado()==0){&lt;br /&gt;
			boolean seguro=false;&lt;br /&gt;
			// Se está nunha zona segura xa non mira as perigosas&lt;br /&gt;
			for(int cont=0; cont &amp;lt; Mundo.ZONAS_SEGURAS.length;cont++){&lt;br /&gt;
				if (Intersector.overlaps(Mundo.ZONAS_SEGURAS[cont], alien.getRectangulo())){&lt;br /&gt;
					seguro=true;&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (!seguro){&lt;br /&gt;
				for(int cont=0; cont &amp;lt; Mundo.ZONAS_PERIGOSAS.length;cont++){&lt;br /&gt;
					if (Intersector.overlaps(Mundo.ZONAS_PERIGOSAS[cont], alien.getRectangulo())){&lt;br /&gt;
						alien.setNumVidas(TIPOS_VIDA.MUERTO);&lt;br /&gt;
					}&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Como está agora encheremos de vidas mortas a parte inferior xa que non nos movemos e os coches seguen pasando por enriba.&lt;br /&gt;
&lt;br /&gt;
Para evitalo imos a engadir á clase Alien un método para inicializar o alien cando morre.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Alien&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; inicializar o alien cando morre.&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;
	public void inicializarAlien(){&lt;br /&gt;
    	  setPosicion(100, 20);&lt;br /&gt;
    	  setVelocidade_montado(0);&lt;br /&gt;
    	  setVelocidadeX(0);&lt;br /&gt;
    	  setVelocidadeY(0);&lt;br /&gt;
    	  setTamano(15,15);&lt;br /&gt;
 	  getRectangulo().setSize(tamano.x/2);&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 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; inicializar o alien cando morre.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7,25&amp;quot;&amp;gt;&lt;br /&gt;
	private void controlarAlien(float delta){&lt;br /&gt;
                .................&lt;br /&gt;
		// Controla se lle colle un vehículo&lt;br /&gt;
		for (ElementoMobil elem : meuMundo.getCoches()){&lt;br /&gt;
			if (Intersector.overlaps(elem.getRectangulo(), alien.getRectangulo())){&lt;br /&gt;
				alien.setNumVidas(TIPOS_VIDA.MUERTO);&lt;br /&gt;
				alien.inicializarAlien();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Controla se cae a auga ou lava&lt;br /&gt;
		if (alien.getVelocidade_montado()==0){&lt;br /&gt;
			boolean seguro=false;&lt;br /&gt;
			// Se está nunha zona segura xa non mira as perigosas&lt;br /&gt;
			for(int cont=0; cont &amp;lt; Mundo.ZONAS_SEGURAS.length;cont++){&lt;br /&gt;
				if (Intersector.overlaps(Mundo.ZONAS_SEGURAS[cont], alien.getRectangulo())){&lt;br /&gt;
					seguro=true;&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (!seguro){&lt;br /&gt;
				for(int cont=0; cont &amp;lt; Mundo.ZONAS_PERIGOSAS.length;cont++){&lt;br /&gt;
					if (Intersector.overlaps(Mundo.ZONAS_PERIGOSAS[cont], alien.getRectangulo())){&lt;br /&gt;
						alien.setNumVidas(TIPOS_VIDA.MUERTO);&lt;br /&gt;
						alien.inicializarAlien();&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;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TAREFA 2.9 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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2014).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>