<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xna tutorial &#187; space invaders</title>
	<atom:link href="http://www.xna-tutorial.com/tag/space-invaders/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xna-tutorial.com</link>
	<description>Otro blog más de WordPress</description>
	<lastBuildDate>Tue, 26 Apr 2011 20:35:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial [Entrega 5]: A&#241;adiendo disparos de los enemigos</title>
		<link>http://www.xna-tutorial.com/tutorial-entrega-5-aadiendo-disparos-de-los-enemigos/</link>
		<comments>http://www.xna-tutorial.com/tutorial-entrega-5-aadiendo-disparos-de-los-enemigos/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 12:40:00 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[space invaders]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/tutorial-entrega-5-aadiendo-disparos-de-los-enemigos/</guid>
		<description><![CDATA[Llegados a este punto, tenemos nuestra nave frente a unas cuantas naves enemigas. Nuestra nave puede disparar y eliminar a los enemigos, pero los enemigos todavía no pueden dispara para intentar eliminarnos. Vamos a ver como podemos hacer esto después del salto.
&#160;
Como ya sabéis, si tenéis alguna duda, podéis plantearla en el foro: http://www.foro.xna-tutorial.com/viewtopic.php?f=4&#38;p=8#p8
&#160;

Añadir los [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Llegados a este punto, tenemos nuestra nave frente a unas cuantas naves enemigas. Nuestra nave puede disparar y eliminar a los enemigos, pero los enemigos todavía no pueden dispara para intentar eliminarnos. Vamos a ver como podemos hacer esto después del salto.</p>
<p align="justify">&#160;</p>
<p align="justify">Como ya sabéis, si tenéis alguna duda, podéis plantearla en el <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;p=8#p8" target="_blank">foro</a>: <a title="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;p=8#p8" href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;p=8#p8">http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;p=8#p8</a></p>
<p align="justify">&#160;</p>
<div align="justify"><span id="more-275"></span></div>
<p align="justify">Añadir los disparos de los enemigos, dado el código que tenemos ya escrito en anteriores entregas del tutorial, va a ser realmente fácil.</p>
<p align="justify">Veamos los cambios que debemos introducir según las clases.</p>
<p align="justify">&#160;</p>
<h1 align="justify">Clase “Enemigo”</h1>
<p align="justify">Lógicamente, esta será la clase que debemos modificar. Lo que haremos será principalmente generar un numero aleatorio, el cual nos indicará si el enemigo debe disparar o no debe disparar. Manos a la obra.</p>
<p>Primero nos definiremos dos nuevos atributos:</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">static</span> Random rand = <span style="color: blue">new</span> Random();     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span>&#160;<span style="color: blue">int</span> probabilidadDisparo = <span style="color: maroon">2</span>;</div>
<p align="justify">&#160;</p>
<p align="justify">El número 2 de “probabilidadDisparo”&#160; es la cota que indica si debe disparar o no. Si subimos ese número, los enemigos dispararan más a menudo. De esta forma podemos aumentar el nivel de dificultad (la cadencia de disparos enemigos) simplemente incrementando ese valor.</p>
<p>&#160;</p>
<p>Ahora vamos al método “Actualizar()”, y le añadimos lo siguiente:</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span>&#160;<span style="color: blue">void</span> actualiza()     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 3</span>     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (disp == <span style="color: blue">null</span>)     <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 6</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (rand.Next(<span style="color: maroon">1000</span>) &lt; probabilidadDisparo)     <br /><span style="color: teal">&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; disparar();     <br /><span style="color: teal">&#160; 8</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">else</span>     <br /><span style="color: teal">10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; disp.actualiza();     <br /><span style="color: teal">12</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">13</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">14</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p align="justify">Esto lo que hará será obtener un nuevo numero aleatorio, y si ese numero es menor que la cota de “probabilidadDisparo” entonces disparará. Esto solo lo hará si el enemigo no ha disparado (recordemos que cada nave solo puede tener un disparo al mismo tiempo). Si ya había disparado, entonces actualizaremos el disparo.</p>
<p align="justify">
<h1 align="justify">&#160;</h1>
<h1 align="justify">&#160;</h1>
<h1 align="justify">Clase “Nave”</h1>
<p align="justify">
<p align="justify">En esta clase vamos a definir una propiedad que nos devuelva el rectángulo que envuelve a la nave para poder comprobar las colisiones. Es un cambio menor.</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Rectangle Rectangulo     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">get</span> { <span style="color: blue">return</span>&#160;<span style="color: blue">new</span> Rectangle((<span style="color: blue">int</span>)pos.X, (<span style="color: blue">int</span>)pos.Y, textura.Width, textura.Height); }     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>&#160;</p>
<p align="justify">&#160;</p>
<h1 align="justify">Clase “Game”</h1>
<p align="justify">Y ahora viene la chica: si unos de los disparos del enemigo nos da, tenemos que eliminar nuestra nave. En próximas versiones lo que haremos será decrementar el contador de vidas de nuestra nave, pero ahora sólo tendremos una vida.</p>
<p>Así que antes de comprobar la colisión de nuestros disparos con los enemigos, que lo vimos en la anterior entrega, comprobaremos que ningún disparo de los enemigos colisione con nuestra nave. Si colisiona, eliminaremos nuestra nave.</p>
<p>&#160;</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (e.Disparo != <span style="color: blue">null</span> &amp;&amp; nave != <span style="color: blue">null</span>)     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (e.Disparo.Rect.Intersects(nave.Rectangulo))     <br /><span style="color: teal">&#160; 6</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave = <span style="color: blue">null</span>;     <br /><span style="color: teal">&#160; 8</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Disparo = <span style="color: blue">null</span>;     <br /><span style="color: teal">&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>&#160;</p>
<p align="justify">Como ahora nuestra nave puede ser null, tenemos que cambiar todas las referencias a nuestra nave para que antes de ejecutar cualquier cosa compruebe que la nave no es null. Si no lo hacemos, nuestro juego “petará” cuando nos de un impacto. El código entero de la clase “game” es el siguiente:</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span> <span style="color: blue">using</span> System;     <br /><span style="color: teal">&#160; 2</span> <span style="color: blue">using</span> System.Collections.Generic;     <br /><span style="color: teal">&#160; 3</span> <span style="color: blue">using</span> System.Collections;     <br /><span style="color: teal">&#160; 4</span> <span style="color: blue">using</span> System.Linq;     <br /><span style="color: teal">&#160; 5</span> <span style="color: blue">using</span> Microsoft.Xna.Framework;     <br /><span style="color: teal">&#160; 6</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Audio;     <br /><span style="color: teal">&#160; 7</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Content;     <br /><span style="color: teal">&#160; 8</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.GamerServices;     <br /><span style="color: teal">&#160; 9</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Graphics;     <br /><span style="color: teal">10</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Input;     <br /><span style="color: teal">11</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Media;     <br /><span style="color: teal">12</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Net;     <br /><span style="color: teal">13</span> <span style="color: blue">using</span> Microsoft.Xna.Framework.Storage;     <br /><span style="color: teal">14</span>     <br /><span style="color: teal">15</span> <span style="color: blue">namespace</span> spaceInvaders     <br /><span style="color: teal">16</span> {     <br /><span style="color: teal">17</span>&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">18</span>&#160;&#160;&#160;&#160; <span style="color: gray">/// This is the main type for your game</span>     <br /><span style="color: teal">19</span>&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">20</span>&#160;&#160;&#160;&#160; <span style="color: blue">public</span>&#160;<span style="color: blue">class</span> Game1 : Microsoft.Xna.Framework.Game     <br /><span style="color: teal">21</span>&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">22</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; GraphicsDeviceManager graphics;     <br /><span style="color: teal">23</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SpriteBatch spriteBatch;     <br /><span style="color: teal">24</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Nave nave;     <br /><span style="color: teal">25</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Enemigo enemigo;</span>     <br /><span style="color: teal">26</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ArrayList enemigos;     <br /><span style="color: teal">27</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">28</span>     <br /><span style="color: teal">29</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">30</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Constructor de la clase</span>     <br /><span style="color: teal">31</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">32</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Game1()     <br /><span style="color: teal">33</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">34</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; graphics = <span style="color: blue">new</span> GraphicsDeviceManager(<span style="color: blue">this</span>);     <br /><span style="color: teal">35</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Content.RootDirectory = <span style="color: maroon">&quot;Content&quot;</span>;     <br /><span style="color: teal">36</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">37</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">38</span>     <br /><span style="color: teal">39</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">40</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Allows the game to perform any initialization it needs to before starting to run.</span>     <br /><span style="color: teal">41</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// This is where it can query for any required services and load any non-graphic</span>     <br /><span style="color: teal">42</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// related content.&#160; Calling base.Initialize will enumerate through any components</span>     <br /><span style="color: teal">43</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// and initialize them as well.</span>     <br /><span style="color: teal">44</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">45</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> Initialize()     <br /><span style="color: teal">46</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">47</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: Add your initialization logic here</span>     <br /><span style="color: teal">48</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave = <span style="color: blue">new</span> Nave();     <br /><span style="color: teal">49</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enemigos = <span style="color: blue">new</span> ArrayList();     <br /><span style="color: teal">50</span>     <br /><span style="color: teal">51</span>     <br /><span style="color: teal">52</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">base</span>.Initialize();     <br /><span style="color: teal">53</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">54</span>     <br /><span style="color: teal">55</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">56</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// LoadContent will be called once per game and is the place to load</span>     <br /><span style="color: teal">57</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// all of your content.</span>     <br /><span style="color: teal">58</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">59</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> LoadContent()     <br /><span style="color: teal">60</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">61</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// Create a new SpriteBatch, which can be used to draw textures.</span>     <br /><span style="color: teal">62</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; spriteBatch = <span style="color: blue">new</span> SpriteBatch(GraphicsDevice);     <br /><span style="color: teal">63</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">64</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Le decimos a la nave que textura tiene que cargar</span>     <br /><span style="color: teal">65</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave.Textura = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;nave&quot;</span>);     <br /><span style="color: teal">66</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave.TexturaDisparo = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;disparoNave&quot;</span>);     <br /><span style="color: teal">67</span>     <br /><span style="color: teal">68</span>     <br /><span style="color: teal">69</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Creamos los enemigos y los metemos en el arraylist</span>     <br /><span style="color: teal">70</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">int</span> numeroEnemigos = <span style="color: maroon">5</span>;     <br /><span style="color: teal">71</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">float</span> X = <span style="color: maroon">275</span>;     <br /><span style="color: teal">72</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">float</span> Y = <span style="color: maroon">100</span>;     <br /><span style="color: teal">73</span>     <br /><span style="color: teal">74</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">for</span> (<span style="color: blue">int</span> i = <span style="color: maroon">0</span>; i &lt; numeroEnemigos;i++)     <br /><span style="color: teal">75</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">76</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vector2 pos = <span style="color: blue">new</span> Vector2(X, Y);     <br /><span style="color: teal">77</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Enemigo e = <span style="color: blue">new</span> Enemigo(pos);     <br /><span style="color: teal">78</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enemigos.Add(e);     <br /><span style="color: teal">79</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; X += <span style="color: maroon">50</span>;     <br /><span style="color: teal">80</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">81</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">82</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//cargamos las texturas del enemigo</span>     <br /><span style="color: teal">83</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span>(Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">84</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">85</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Textura = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;enemigo&quot;</span>);     <br /><span style="color: teal">86</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.TexturaDisparo = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;disparoNave&quot;</span>);     <br /><span style="color: teal">87</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">88</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: use this.Content to load your game content here</span>     <br /><span style="color: teal">89</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">90</span>     <br /><span style="color: teal">91</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">92</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// UnloadContent will be called once per game and is the place to unload</span>     <br /><span style="color: teal">93</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// all content.</span>     <br /><span style="color: teal">94</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">95</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> UnloadContent()     <br /><span style="color: teal">96</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">97</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: Unload any non ContentManager content here</span>     <br /><span style="color: teal">98</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">99</span>     <br /><span style="color: teal">100</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">101</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Allows the game to run logic such as updating the world,</span>     <br /><span style="color: teal">102</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// checking for collisions, gathering input, and playing audio.</span>     <br /><span style="color: teal">103</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">104</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;param name=&quot;gameTime&quot;&gt;Provides a snapshot of timing values.&lt;/param&gt;</span>     <br /><span style="color: teal">105</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> Update(GameTime gameTime)     <br /><span style="color: teal">106</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">107</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// Allows the game to exit</span>     <br /><span style="color: teal">108</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Escape))     <br /><span style="color: teal">109</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">this</span>.Exit();     <br /><span style="color: teal">110</span>     <br /><span style="color: teal">111</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: Add your update logic here</span>     <br /><span style="color: teal">112</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (nave != <span style="color: blue">null</span>)     <br /><span style="color: teal">113</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave.actualiza();     <br /><span style="color: teal">114</span>     <br /><span style="color: teal">115</span>     <br /><span style="color: teal">116</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">117</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">118</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.actualiza();     <br /><span style="color: teal">119</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">120</span>     <br /><span style="color: teal">121</span>     <br /><span style="color: teal">122</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//comprobamos si algun disparo enemigo nos ha dado</span>     <br /><span style="color: teal">123</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">124</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">125</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (e.Disparo != <span style="color: blue">null</span> &amp;&amp; nave != <span style="color: blue">null</span>)     <br /><span style="color: teal">126</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">127</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (e.Disparo.Rect.Intersects(nave.Rectangulo))     <br /><span style="color: teal">128</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">129</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave = <span style="color: blue">null</span>;     <br /><span style="color: teal">130</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Disparo = <span style="color: blue">null</span>;     <br /><span style="color: teal">131</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">132</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">133</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">134</span>     <br /><span style="color: teal">135</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Comprobamos que el disparo colisiona con algun enemigo</span>     <br /><span style="color: teal">136</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Si colisiona, eliminamos el enemigo y el disparo</span>     <br /><span style="color: teal">137</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">138</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Array auxiliar para alamacenar los enemigos que debemos eliminar</span>     <br /><span style="color: teal">139</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ArrayList eliminar = <span style="color: blue">new</span> ArrayList();     <br /><span style="color: teal">140</span>     <br /><span style="color: teal">141</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Si no hay disparo, no hace falta que entre</span>     <br /><span style="color: teal">142</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (nave != <span style="color: blue">null</span> &amp;&amp; nave.Disparo != <span style="color: blue">null</span>)     <br /><span style="color: teal">143</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">144</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Recorremos la lista de enemigos y comprobamos si alguno colisiona</span>     <br /><span style="color: teal">145</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">146</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">147</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rectangle rectEnemigo = e.Rect;     <br /><span style="color: teal">148</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rectangle rectDisparo = nave.Disparo.Rect;     <br /><span style="color: teal">149</span>     <br /><span style="color: teal">150</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (rectEnemigo.Intersects(rectDisparo))     <br /><span style="color: teal">151</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">152</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//añadimos al enemigo a la lista a eliminar</span>     <br /><span style="color: teal">153</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; eliminar.Add(e);     <br /><span style="color: teal">154</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">155</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">156</span>     <br /><span style="color: teal">157</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//si la lista de enemigos a eliminar no esta vacia</span>     <br /><span style="color: teal">158</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (eliminar.Count &gt; <span style="color: maroon">0</span>)     <br /><span style="color: teal">159</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">160</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo el <span style="color: blue">in</span> eliminar)     <br /><span style="color: teal">161</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">162</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//eliminamos al enemigo</span>     <br /><span style="color: teal">163</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enemigos.Remove(el);     <br /><span style="color: teal">164</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">165</span>     <br /><span style="color: teal">166</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//eliminamos el disparo</span>     <br /><span style="color: teal">167</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave.Disparo = <span style="color: blue">null</span>;     <br /><span style="color: teal">168</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">169</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">170</span>     <br /><span style="color: teal">171</span>     <br /><span style="color: teal">172</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">base</span>.Update(gameTime);     <br /><span style="color: teal">173</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">174</span>     <br /><span style="color: teal">175</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">176</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// This is called when the game should draw itself.</span>     <br /><span style="color: teal">177</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">178</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;param name=&quot;gameTime&quot;&gt;Provides a snapshot of timing values.&lt;/param&gt;</span>     <br /><span style="color: teal">179</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> Draw(GameTime gameTime)     <br /><span style="color: teal">180</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">181</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; GraphicsDevice.Clear(Color.Black);     <br /><span style="color: teal">182</span>     <br /><span style="color: teal">183</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: Add your drawing code here</span>     <br /><span style="color: teal">184</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; spriteBatch.Begin();     <br /><span style="color: teal">185</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">186</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (nave != <span style="color: blue">null</span>) nave.Draw(spriteBatch); <span style="color: green">//pitnamos la nave</span>     <br /><span style="color: teal">187</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">188</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">189</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Draw(spriteBatch);     <br /><span style="color: teal">190</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">191</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">192</span>     <br /><span style="color: teal">193</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; spriteBatch.End();     <br /><span style="color: teal">194</span>     <br /><span style="color: teal">195</span>     <br /><span style="color: teal">196</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">base</span>.Draw(gameTime);     <br /><span style="color: teal">197</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">198</span>&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">199</span> }     <br /><span style="color: teal">200</span> </div>
<p>&#160;</p>
<p>&#160;</p>
<p>Y ya está! ya tenemos nuestros enemigos disparando y nosotros también disparando.</p>
</p>
<p>Como siempre, puedes bajarte el código fuente del siguiente enlace:</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/12/Tutorial5.zip" target="_blank"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="down" align="left" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/down1.png" width="61" height="63" /></a>&#160; <a href="http://www.xna-tutorial.com/wp-content/uploads/2009/12/Tutorial5.zip" target="_blank">Descargar Código Fuente del tutorial</a></p>
</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Un saludo y hasta la próxima entrega!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/tutorial-entrega-5-aadiendo-disparos-de-los-enemigos/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Tutorial [Entrega 4]: A&#241;adiendo enemigos</title>
		<link>http://www.xna-tutorial.com/tutorial-entrega-4-aadiendo-enemigos/</link>
		<comments>http://www.xna-tutorial.com/tutorial-entrega-4-aadiendo-enemigos/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 09:31:00 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[space invaders]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=210</guid>
		<description><![CDATA[Continuamos con la siguiente entrega del tutorial. Llegados a este punto, tenemos a una nave que disipara. La nave se mueve con las teclas de dirección y dispara pulsando la tecla de dirección arriba. Pero…. ¿a qué dispara? Hoy introduciremos los enemigos para que sirvan de diana, XD. Y lo de siempre, para cualquier duda [...]]]></description>
			<content:encoded><![CDATA[<p>Continuamos con la siguiente entrega del tutorial. Llegados a este punto, tenemos a una nave que disipara. La nave se mueve con las teclas de dirección y dispara pulsando la tecla de dirección arriba. Pero…. ¿a qué dispara? Hoy introduciremos los enemigos para que sirvan de diana, XD. Y lo de siempre, para cualquier duda tienes el <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">foro</a>: <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4</a></p>
<p><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image21.png" width="452" height="350" /></p>
<p>Mira el tutorial después del salto.</p>
</p>
<p> <span id="more-210"></span>
</p>
<p>Así que sigues interesado en XNA y el ejemplo del Space Invaders, eh? Pues aquí tienes como meter los enemigos.</p>
<p>&#160;</p>
<h1>Clase Enemigo.cs</h1>
<p>Al igual que hicimos con la clase “Nave.cs”, vamos a crear una nueva clase donde encapsular métodos y atributos necesarios para el enemigo.</p>
<h2>Atributos</h2>
<p>Como atributos vamos a tener los mismos que e la nave: el sprite de la nave, la posición, y el disparo de los enemigos y la textura del disparo de los enemigos.</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">private</span> Vector2 pos; <span style="color: green">//posicion del enemigo </span>    <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">private</span> Texture2D textura; <span style="color: green">//textura del enemigo </span>    <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">private</span> Disparo disp; <span style="color: green">//disparo </span>    <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">private</span> Texture2D texturaDisparo; <span style="color: green">//Textura del disparo</span></div>
<p>&#160;</p>
<p>&#160;</p>
<p>Y las propiedades para cada atributo:</p>
<p>&#160;</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Vector2 Posicion&#160; <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160; <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">get</span> { <span style="color: blue">return</span> pos; }&#160; <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">set</span> { pos = value; }&#160; <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160; <br /><span style="color: teal">&#160; 6</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br /><span style="color: teal">&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Texture2D Textura&#160; <br /><span style="color: teal">&#160; 8</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160; <br /><span style="color: teal">&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">get</span> { <span style="color: blue">return</span> textura; }&#160; <br /><span style="color: teal">10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">set</span> { textura = value; }&#160; <br /><span style="color: teal">11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160; <br /><span style="color: teal">12</span>     <br /><span style="color: teal">13</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Disparo Disparo&#160; <br /><span style="color: teal">14</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160; <br /><span style="color: teal">15</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">get</span> { <span style="color: blue">return</span> disp; }&#160; <br /><span style="color: teal">16</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">set</span> { disp = value; }&#160; <br /><span style="color: teal">17</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160; <br /><span style="color: teal">18</span>     <br /><span style="color: teal">19</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Texture2D TexturaDisparo&#160; <br /><span style="color: teal">20</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160; <br /><span style="color: teal">21</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">get</span> { <span style="color: blue">return</span> texturaDisparo; }&#160; <br /><span style="color: teal">22</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">set</span> { texturaDisparo = value; }&#160; <br /><span style="color: teal">23</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>Vamos a ver ahora que métodos necesita, aunque supongo que ya te imaginarás que necesita prácticamente los mismo métodos que nuestra clase “Nave.cs”</p>
<p>&#160;</p>
<h2>Métodos</h2>
<p>&#160;</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Constructor por defecto del enemigo</span>     <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Enemigo()     <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 6</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pos = <span style="color: blue">new</span> Vector2(<span style="color: maroon">400</span>,<span style="color: maroon">100</span>);     <br /><span style="color: teal">&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">&#160; 8</span>     <br /><span style="color: teal">&#160; 9</span>     <br /><span style="color: teal">10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// consturctor sobrecargado del enemigo donde le damos una pos inicial</span>     <br /><span style="color: teal">12</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">13</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span> Enemigo(Vector2 posicion)     <br /><span style="color: teal">14</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">15</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pos = posicion;     <br /><span style="color: teal">16</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">17</span>     <br /><span style="color: teal">18</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">19</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Comprueba el teclado y mueve la nave segun las teclas pulsadas</span>     <br /><span style="color: teal">20</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">21</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span>&#160;<span style="color: blue">void</span> actualiza()     <br /><span style="color: teal">22</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">23</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//De momento nuestro enemigo no hace nada</span>&#160; <br /><span style="color: teal">24</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">25</span>     <br /><span style="color: teal">26</span>     <br /><span style="color: teal">27</span>     <br /><span style="color: teal">28</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;summary&gt;</span>     <br /><span style="color: teal">29</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// Pinta la nave y el disparo si lo tiene</span>     <br /><span style="color: teal">30</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;/summary&gt;</span>     <br /><span style="color: teal">31</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: gray">/// &lt;param name=&quot;batch&quot;&gt;&lt;/param&gt;</span>     <br /><span style="color: teal">32</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">public</span>&#160;<span style="color: blue">void</span> Draw(SpriteBatch batch)     <br /><span style="color: teal">33</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">34</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; batch.Draw(textura, pos, Color.White);     <br /><span style="color: teal">35</span>     <br /><span style="color: teal">36</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Pintamos el disparo</span>     <br /><span style="color: teal">37</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">if</span> (disp != <span style="color: blue">null</span>)     <br /><span style="color: teal">38</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">39</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; batch.Draw(disp.Textura, disp.Posicion, Color.White);     <br /><span style="color: teal">40</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">41</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>Ahora podemos introducir nuestros enemigos en el juego. Vamos a ver como los introducimos.</p>
<p>&#160;</p>
<h1>Clase “Game1.cs”</h1>
<p>Como queremos tener unos cuantos enemigos en la pantalla (solo uno seria muy aburrido), vamos a crearnos una nueva lista donde meteremos a nuestros enemigos.</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span> ArrayList enemigos;</div>
<p>&#160;</p>
<p>Y en el método Initialize() inicializaremos el array:</p>
<p>&#160;</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">protected</span>&#160;<span style="color: blue">override</span>&#160;<span style="color: blue">void</span> Initialize()     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">// TODO: Add your initialization logic here</span>     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; nave = <span style="color: blue">new</span> Nave();     <br /><span style="color: teal">&#160; 5</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enemigos = <span style="color: blue">new</span> ArrayList();     <br /><span style="color: teal">&#160; 6</span>     <br /><span style="color: teal">&#160; 7</span>     <br /><span style="color: teal">&#160; 8</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">base</span>.Initialize();     <br /><span style="color: teal">&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>El método LoadContent() es el que más tela tiene, así que lo voy a comentar:</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//Creamos los enemigos y los metemos en el arraylist</span>     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">int</span> numeroEnemigos = <span style="color: maroon">5</span>;</div>
<div style="font-family: courier new">&#160;</div>
<div style="font-family: courier new">Con esta variable le decimos el numero de enemigos que queremos ver en la pantalla, en este caso 5.</div>
<div style="font-family: courier new"><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">float</span> X = <span style="color: maroon">275</span>;     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">float</span> Y = <span style="color: maroon">100</span>;&#160; <br /><span style="color: teal">&#160; </span></div>
<p><span style="color: teal"><font color="#000000">Estas dos variables son las coordenadas de donde queremos que se pinte el primer enemigo. En este caso, al ser 5 enemigos, le voy a decir que el primero se pinte a la izquierda para que el conjunto quede centrado en la pantalla.</font></span></p>
<p><span style="color: teal"><font face="Courier New"></font></span></p>
<div style="font-family: courier new">Ahora, con un bucle, creamos los enemigos, metiendo una separación de 50pix entre cada uno, y los metemos en la lista de enemigos.</div>
<div style="font-family: courier new"><span style="color: teal">&#160; 6</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">for</span> (<span style="color: blue">int</span> i = <span style="color: maroon">0</span>; i &lt; numeroEnemigos;i++)     <br /><span style="color: teal">&#160; 7</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 8</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vector2 pos = <span style="color: blue">new</span> Vector2(X, Y);     <br /><span style="color: teal">&#160; 9</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Enemigo e = <span style="color: blue">new</span> Enemigo(pos);     <br /><span style="color: teal">10</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; enemigos.Add(e);     <br /><span style="color: teal">11</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; X += <span style="color: maroon">50</span>;     <br /><span style="color: teal">12</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br /><span style="color: teal">13</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </div>
<div style="font-family: courier new">&#160;</div>
<div style="font-family: courier new">Ahora, para cada enemigo de la lista, tenemis que decirle que texturas vamos a cargar. En este caso, todos los enemigos tienen la misma textura, y el disparo es el mismo que dispara nuestra nave.</div>
<div style="font-family: courier new"><span style="color: teal">14</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: green">//cargamos las texturas del enemigo</span>     <br /><span style="color: teal">15</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span>(Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">16</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">17</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Textura = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;enemigo&quot;</span>);     <br /><span style="color: teal">18</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.TexturaDisparo = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;disparoNave&quot;</span>);     <br /><span style="color: teal">19</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p align="left">Por cierto, aquí os dejo el sprite del enemigo:</p>
<p align="center"><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="enemigo" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/enemigo1.png" width="37" height="28" /></p>
<p align="center"><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="enemigoBIG" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/enemigoBIG1.png" width="124" height="91" /></p>
<p>Si le dais a” botón derecho/guardar imagen como” os podéis guardar el sprite.</p>
<p>&#160;</p>
<p>Ahora queda pintar a los enemigos en la pantalla. <strong>Nota</strong>: El método update() me lo salto porque de momento los enemigos no hacen nada.</p>
<p>Pues al igual que con la nave, tenemos que decirle a todos los enemigos que se pinten. Para ellos, recorremos la lista con un bucle “foreach” dela siguiente manera:</p>
<p>&#160;</p>
<div style="font-family: courier new"><span style="color: teal">&#160; 1</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span style="color: blue">foreach</span> (Enemigo e <span style="color: blue">in</span> enemigos)     <br /><span style="color: teal">&#160; 2</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br /><span style="color: teal">&#160; 3</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.Draw(spriteBatch);     <br /><span style="color: teal">&#160; 4</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</div>
<p>&#160;</p>
<p>&#160;</p>
<p>Y ya está. Ya tenemos a 5 enemigos en nuestra pantalla. Si quieres puedes ir jugando con las posiciones iniciales de los enemigos, meter mas filas de enemigos, etc. hasta que escriba el siguiente tutorial, donde haremos que los enemigos se muevan!!!</p>
<p>Y como siempre, el código fuente del tutorial:</p>
<p>&#160;</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial4.zip"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="down" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/down1.png" width="61" height="63" /></a> <a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial4.zip">Descargar código fuente</a></p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Si tienes alguna duda con el tutorial, puedes preguntármela en el <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">foro</a>: <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4</a></p>
<p>Un saludo a todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/tutorial-entrega-4-aadiendo-enemigos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial [Entrega 2]: Moviendo un sprite por la pantalla</title>
		<link>http://www.xna-tutorial.com/moviendo-un-sprite-por-la-pantalla/</link>
		<comments>http://www.xna-tutorial.com/moviendo-un-sprite-por-la-pantalla/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 19:08:46 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[space invaders]]></category>
		<category><![CDATA[sprite]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/moviendo-un-sprite-por-la-pantalla/</guid>
		<description><![CDATA[&#160;
Parece que ha habido un error y la 2º parte del tutorial se ha borrado, asi que vuelvo a subirlo: Un saludo y perdonar las molestias

&#160;
&#160;
Continuamos la serie de tutoriales con lo más básico de XNA: crear el proyecto y mover un sprite por la pantalla.
En esta entrega crearemos un proyecto de XNA 3.1 y [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<blockquote><p>Parece que ha habido un error y la 2º parte del tutorial se ha borrado, asi que vuelvo a subirlo: Un saludo y perdonar las molestias</p>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Continuamos la serie de tutoriales con lo más básico de XNA: crear el proyecto y mover un sprite por la pantalla.</p>
<p>En esta entrega crearemos un proyecto de XNA 3.1 y dibujaremos por la pantalla un sprite (nuestra nave) y haremos que se mueva por la pantalla. Vamos a empezar por cosas fáciles y ya iremos subiendo poco a poco el nivel de dificultad.</p>
<p>Encontrarás el tutorial completo después del salto.</p>
</p>
<p> <span id="more-273"></span>
</p>
<h2><u>Creando el proyecto</u></h2>
<p>Lo primero que tenemos que hacer es crear un nuevo proyecto de XNA. Para ello, abrimos el VS2008 (o el Visual C# Studio si tienes la versión gratuita) y le damos a <strong>“Archivo/Nuevo/Proyecto”.</strong></p>
<p><strong></strong></p>
<p><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/image1.png" width="561" height="369" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Nos saldrá una nueva ventana donde debemos elegir como tipo de proyecto “<strong>XNA Game Studio 3.1</strong>” y como plantilla “<strong>Windows Game</strong>”.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/image12.png" width="805" height="540" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>También le debemos <strong>dar un nombre al proyecto</strong>. Como hoy estoy poco ingenioso, lo llamaré simplemente “Space Invaders”. Vosotros podéis darle el nombre que queráis.</p>
<p>Si le damos a aceptar, veremos que se creará un proyecto nuevo, con varios ficheros (Game1.cs, Program.cs). Vemos que ya hay código escrito, y si le damos a F5 nos saldrá una pantalla azul. Esa pantalla es nuestro&#160; futuro juego.&#160; El fichero <em>Program.cs</em> no debemos tocarlo.</p>
<h3></h3>
<h3></h3>
<h2><span style="text-decoration: underline"></span></h2>
<h2><span style="text-decoration: underline">Creando la nave</span></h2>
<p>Ahora vamos a crear nuestra nave y pintarla en la pantalla esa azul que nos ha salido antes.</p>
<p>Para ello, en el archivo <strong>Game1.cs</strong> nos creamos una variable llamada nave de tipo ‘Texture2D’ que representará nuestra nave para combatir la invasión alienígena y un nuevo tipo de dato que trae XNA llamado ‘Vector2’ para almacenar la posición de la nave.</p>
<blockquote><div style="font-family: courier new"><span style="color: blue">private</span> Texture2D nave;       <br /><span style="color: blue">private</span> Vector2 pos;</div>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Ahora vamos al método Initialize(). En este método iniciamos la posición inicial de la nave. El resultado del método os quedará así:</p>
<blockquote><div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> Initialize()       <br />{       <br /><span style="color: green">// TODO: Add your initialization logic here</span>       <br />pos = <span style="color: blue">new</span> Vector2(<span style="color: maroon">400</span>,<span style="color: maroon">550</span>);<span style="color: blue">base</span>.Initialize();       <br />}</div>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Ya tenemos la posición de la nave. Ahora le tenemos que indicar al programa que sprite queremos usar como nave. Así que os dejo yo aquí uno muy chulo hecho por mi con gran destreza haciendo uso de mis años usando el Paint, XD.</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/12/nave.png"><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="nave" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/nave_thumb.png" width="32" height="22" /></a></p>
<p>&#160;</p>
<p>Bien, para cargar la imagen primero tenemos que agregarla al directorio <strong>“Content”</strong> del juego. Para ello, le damos a <strong>“Botón Derecho”</strong> sobre “Content” y seleccionamos <strong>“Agregar/Elemento Existente”.</strong> Buscamos el sprite y le damos a aceptar. También podemos arrastrar directamente una imagen al directorio.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/image37.png" width="461" height="445" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Ahora en nuestro proyecto tenemos un sprite llamado “nave”. Para cargarlo, usaremos el método <strong><em>‘Load()’</em></strong> dentro de nuestro método LoadContent(). Nos quedará algo así:</p>
<blockquote><div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> LoadContent()       <br />{       <br /><span style="color: green">// Create a new SpriteBatch, which can be used to draw textures.</span>       <br />spriteBatch = <span style="color: blue">new</span> SpriteBatch(GraphicsDevice);       <br />nave = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&quot;nave&quot;</span>);<span style="color: green">// TODO: use this.Content to load your game content here</span>       <br />}</div>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Ahora ya falta dibujarlo por la pantalla. Así que en el método Draw() escribimos el siguiente código para pintarlo.</p>
<blockquote><div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> Draw(GameTime gameTime)       <br />{       <br />GraphicsDevice.Clear(Color.CornflowerBlue);<span style="color: green">// TODO: Add your drawing code here</span>       <br />spriteBatch.Begin();       <br />spriteBatch.Draw(nave, pos, Color.White);       <br />spriteBatch.End();</div>
<div style="font-family: courier new"><span style="color: blue">base</span>.Draw(gameTime);       <br />}</div>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Si le damos ahora a F5 nos mostrará por la pantalla un fondo azul y nuestra nave. Igual que esta imagen:</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/image18.png" width="813" height="636" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Muy bonito, si, pero todavía no podemos hacer nada con ella, así que vamos a ver como moverla por la pantalla.</p>
<p>&#160;</p>
<p>Para ello, volvemos al método “update()” y escribimos dos instrucciones if: una para mover a la izquierda y otra para mover a la derecha.</p>
<blockquote><p style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> Update(GameTime gameTime)       <br />{       <br /><span style="color: green">// Allows the game to exit</span>       <br /><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Escape))       <br /><span style="color: blue">this</span>.Exit();</p>
<p><span style="color: green">// TODO: Add your update logic here</span>       <br /><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Left))       <br />pos.X -= <span style="color: maroon">5</span>;       <br /><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Right))       <br />pos.X += <span style="color: maroon">5</span>;       <br /><span style="color: blue">base</span>.Update(gameTime);       <br />}</p>
</blockquote>
<p>&#160;</p>
<p>&#160;</p>
<p>Ahora, si le damos a F5, con las teclas de dirección podremos mover nuestra nave hacia izquierda y derecha. Fácil, verdad?</p>
<p>En la próxima entrega crearemos una clase para nuestra nave para poder controlarla mejor y haremos que pueda disparar.</p>
<p>&#160;</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial2.zip"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="down" align="left" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/down.png" width="61" height="63" /></a> <a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial2.zip"><strong><span style="text-decoration: underline">Descargar Código Fuente</span></strong></a></p>
<p>&#160;</p>
<p>Hasta la próxima entrega!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/moviendo-un-sprite-por-la-pantalla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial [Entrega 3]: A&#241;adiendo disparos</title>
		<link>http://www.xna-tutorial.com/tutorial-entrega-3-aadiendo-disparos/</link>
		<comments>http://www.xna-tutorial.com/tutorial-entrega-3-aadiendo-disparos/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 15:28:00 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[space invaders]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=174</guid>
		<description><![CDATA[Continuamos con las entregas del tutorial para hacer un clon del Space Invaders en XNA.
Ahora que ya tenemos una nave protagonista moviéndose por la pantalla, le realizaremos algunas mejoras a la nave y haremos que pueda dispara.
Podrás leer el tutorial completo después del salto. Y recuerda que si tienes alguna duda con el tutorial, puedes [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Continuamos con las entregas del tutorial para hacer un clon del <em>Space Invaders</em> en XNA.</p>
<p align="justify">Ahora que ya tenemos una nave protagonista moviéndose por la pantalla, le realizaremos algunas mejoras a la nave y haremos que pueda dispara.</p>
<p align="justify">Podrás leer el tutorial completo después del salto. Y recuerda que si tienes alguna duda con el tutorial, puedes preguntármela en el <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">foro</a>: <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4</a></p>
<p align="justify">Sabras de jugar a juegos, tanto si son de consola como si son de otro tipo como <a href="http://espanol.partypoker.com/">PartyPoker  español</a> que tener una guia ayuda bastante a mejorar.Los consejos en los juegos son esenciales para jugar a un buen nivel. Espero que el siguiente tutorial te sea de ayuda.</p>
<p align="justify">
<p align="justify">
<p align="justify">
<p><span id="more-174"></span></p>
<h2><span style="text-decoration: underline;">Clase Nave</span></h2>
<p align="justify">Para empezar, vamos a encapsular nuestra nave en una clase llamada “Nave”. Esto lo deberíamos haber hecho desde el principio, pero como quería mostraros lo fácil que era cargar sprites en XNA y moverlos por la pantalla, me lo pase por alto.</p>
<p align="justify">Para crear la clase “Nave”, clicamos con el botón derecho sobre el proyecto y de damos a <strong>“Agregar/Clase”.</strong></p>
<p align="justify"><strong> </strong></p>
<p style="text-align: center"><img class="aligncenter" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/image.png" border="0" alt="image" width="491" height="539" /></p>
<p align="justify">
<p align="justify">
<p align="justify">Como nombre escribimos “<strong>Nave.cs</strong>” y le damos a “<strong>Agregar</strong>”. Vale, ya tenemos nuestra clase. Ahora vamos a completarla.</p>
<h1></h1>
<h1></h1>
<h1><span style="text-decoration: underline;">Atributos</span></h1>
<p>De momento, vamos a crear dos atributos:</p>
<blockquote>
<div style="font-family: courier new"><span style="color: blue">private</span> Vector2 pos; <span style="color: green">//posicion de la nave</span><br />
<span style="color: blue">private</span> Texture2D textura; <span style="color: green">//textura de la nave</span></div>
</blockquote>
<p>Y sus respectivas <a href="http://msdn.microsoft.com/es-es/library/x9fsa0sw%28VS.80%29.aspx" target="_blank">propiedades</a>:</p>
<blockquote>
<div style="font-family: courier new"><span style="color: blue">public</span> Vector2 Posicion<br />
{<br />
<span style="color: blue"> get</span> { <span style="color: blue">return</span> pos; }<br />
<span style="color: blue"> set</span> { pos = value; }<br />
}<span style="color: blue"> </span><span style="color: blue"> </span></p>
<p><span style="color: blue">public</span> Texture2D Textura<br />
{<br />
<span style="color: blue"> get</span> { <span style="color: blue">return</span> textura; }<br />
<span style="color: blue"> set</span> { textura = value; }<br />
}</div>
</blockquote>
<h3></h3>
<h3></h3>
<h3><span style="text-decoration: underline;">Métodos</span></h3>
<p align="justify">Necesitamos el constructor de la clase, donde le daremos una posición inicial a la nave, un método para actualiza la posición de la nave, y otro ultimo para pintar la nave en la pantalla.</p>
<p><strong> </strong></p>
<p><strong>CONSTRUCTOR</strong></p>
<blockquote><p><span style="color: blue">public</span> Nave()<br />
{<br />
pos = <span style="color: blue">new</span> Vector2(<span style="color: maroon">400</span>,<span style="color: maroon">550</span>); <span style="color: green">//nave centrada en la pantalla, parte inferior</span><br />
}</p></blockquote>
<p><em><strong> </strong></em></p>
<p><em><strong>METODO ACTUALIZA</strong></em></p>
<p><em>Ahora, además de mover la nave, vamos a comprobar que no se salga de la pantalla. Si esto ocurre, no le vamos a dejar moverse.</em></p>
<div style="font-family: courier new"><span style="color: blue">public</span> <span style="color: blue">void</span> actualiza()<br />
{<br />
<span style="color: blue"> if</span> (Keyboard.GetState().IsKeyDown(Keys.Left))<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (pos.X &gt; <span style="color: maroon">0</span>) <span style="color: green">//no se sale por la izquierda</span><br />
<span style="color: blue"> </span>pos.X -= <span style="color: maroon">5</span>;<br />
<span style="color: blue"> </span>}<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Right))<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (pos.X + textura.Width &lt; <span style="color: maroon">800</span>) <span style="color: green">//no se sale por la derecha</span><br />
<span style="color: blue"> </span>pos.X += <span style="color: maroon">5</span>;<br />
<span style="color: blue"> </span>}</div>
<div style="font-family: courier new">}</div>
<p><em> </em></p>
<p><strong>METODO DRAW</strong></p>
<blockquote>
<div style="font-family: courier new"><span style="color: blue">public</span> <span style="color: blue">void</span> Draw(SpriteBatch batch)<br />
{</div>
<p style="font-family: courier new"><span style="color: green">//Pintamos la nave</span><br />
batch.Draw(textura, pos, Color.White);</p>
<div style="font-family: courier new">}</div>
</blockquote>
<p>Ya tenemos nuestra clase nave. Vamos ahora con la siguiente.</p>
<h3><span style="text-decoration: underline;"><span style="font-size: large"> </span></span></h3>
<h3><span style="text-decoration: underline;"><span style="font-size: large"> </span></span></h3>
<h3><span style="text-decoration: underline;"><span style="font-size: large"> </span></span></h3>
<h3><span style="text-decoration: underline;"><span style="font-size: large"> </span></span></h3>
<h3><span style="text-decoration: underline;"><span style="font-size: large">Clase Disparo</span></span></h3>
<p align="justify">Ahora vamos a crear la clase disparo. Realmente no haría falta, ya que podríamos asignar al personaje una nueva textura y una variable posición y lo tendríamos solucionado. Sin embargo, pensando a largo plazo, creo que nos va a venir bien una clase disparo para poder meterle animaciones, distintos tipos de disparos, etc…</p>
<h3></h3>
<h3><span style="text-decoration: underline;">A</span><span style="text-decoration: underline;">tributos</span></h3>
<p>De momento, vamos a crear cuatro atributos:</p>
<blockquote>
<div style="font-family: courier new"><span style="color: blue">private</span> Vector2 pos; <span style="color: green">//posición del disparo</span></div>
<div style="font-family: courier new"><span style="color: green"> </span><span style="color: blue">private</span> Texture2D textura; <span style="color: green">//textura del disparo</span><br />
<span style="color: blue">private</span> <span style="color: blue">bool</span> vivo; <span style="color: green">//indica si el disparo aun esta en el juego</span></div>
</blockquote>
<p>Y sus respectivas <a href="http://msdn.microsoft.com/es-es/library/x9fsa0sw%28VS.80%29.aspx" target="_blank">propiedades</a>:</p>
<div style="font-family: courier new"><span style="color: blue">public</span> Vector2 Posicion<br />
{<br />
<span style="color: blue"> </span><span style="color: blue">get</span> { <span style="color: blue">return</span> pos; }<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">set</span> { pos = value; }<br />
}<br />
<span style="color: blue"> </span></div>
<div style="font-family: courier new"><span style="color: blue">public</span> Texture2D Textura<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">get</span> { <span style="color: blue">return</span> textura; }<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">set</span> { textura = value; }<br />
}</div>
<div style="font-family: courier new"></div>
<div style="font-family: courier new"><span style="color: blue">public</span> <span style="color: blue">bool</span> Vivo<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">get</span> { <span style="color: blue">return</span> vivo; }<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">set</span> { vivo = value; }<br />
}</div>
<h3></h3>
<h3></h3>
<h3><span style="text-decoration: underline;">Métodos</span></h3>
<p align="justify">Al igual que antes, vamos a programar un constructor de la clase y un método al que llamaremos para actualizar su posición en la pantalla.</p>
<p align="justify">
<p align="justify">Para el constrictor, necesitaremos una posición inicial y un sprite. Lo posición inicial:</p>
<p><span style="color: blue">public</span> Disparo(Vector2 posicionInicial, Texture2D sprite)<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span>pos = posicionInicial;<br />
<span style="color: blue"> </span><span style="color: blue"> </span>textura = sprite;<br />
<span style="color: blue"> </span><span style="color: blue"> </span>vivo = <span style="color: maroon">true</span>;<br />
}</p>
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">El método actualiza lo usaremos para comprobar que el disparo sale de la pantalla o no. Si sale de la pantalla, pondremos su variable “vivo” a false. Si sigue vivo, entonces lo movemos.</p>
<p><span style="color: blue">public</span> <span style="color: blue">void</span> actualiza()<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">if</span> (pos.Y + textura.Height &lt; <span style="color: maroon">0</span>) vivo = <span style="color: maroon">false</span>;<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">if</span> (pos.Y &gt; <span style="color: maroon">600</span>) vivo = <span style="color: maroon">false</span>;</p>
<p><span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">if</span> (vivo)<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue"> </span>pos.Y -= <span style="color: maroon">10</span>;<br />
}</p>
<h2></h2>
<h2></h2>
<h2><span style="text-decoration: underline;">Cambios en la clase nave</span></h2>
<p align="justify">Ahora que ya tenemos una clase disparo, vamos a hacer que nuestra nave pueda disparar. Solo le vamos a permitir un disparo (al igual que en el juego original), y hasta que ese disparo no impacte con un enemigo, o se salga de la pantalla, no vamos a poder volver a disparar.</p>
<p align="justify">Para hacer esto, tenemos que realizar las siguientes modificaciones en la clase “<strong>Nave.cs</strong>”</p>
<p align="justify">
<div style="font-family: courier new"><span style="color: blue">public</span> <span style="color: blue">void</span> actualiza()<br />
{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Left))<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (pos.X &gt; <span style="color: maroon">0</span>)<br />
<span style="color: blue"> </span>pos.X -= <span style="color: maroon">5</span>;<br />
<span style="color: blue"> </span>}<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Right))<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (pos.X + textura.Width &lt; <span style="color: maroon">800</span>)<br />
<span style="color: blue"> </span>pos.X += <span style="color: maroon">5</span>;<br />
<span style="color: blue"> </span>}<span style="color: blue"> </span><span style="color: green">//Añadimos el disparo</span><br />
<span style="color: blue"> </span><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Up))<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (disp == <span style="color: blue">null</span>)<br />
<span style="color: blue"> </span>disp = <span style="color: blue">new</span> Disparo(<span style="color: blue">new</span> Vector2(pos.X + textura.Width/<span style="color: maroon">2</span>, pos.Y), texturaDisparo); <span style="color: blue"> </span><span style="color: green">//la <span style="color: blue"> </span>posicion del disparo es la mitad de nuestra nave</span><br />
<span style="color: blue"> </span>}</p>
<p><span style="color: blue"> </span><span style="color: green">//Si el disparo esta vivo, lo movemos. Si no, lo ponemos a null</span><br />
<span style="color: blue"> </span><span style="color: green">//para poder volver a disparar</span><br />
<span style="color: blue"> </span><span style="color: blue">if</span> (disp != <span style="color: blue">null</span>)<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span><span style="color: blue">if</span> (disp.Vivo)<br />
<span style="color: blue"> </span>disp.actualiza();<br />
<span style="color: blue"> </span><span style="color: blue">else</span><br />
<span style="color: blue"> </span>disp = <span style="color: blue">null</span>;<br />
<span style="color: blue"> </span>}<br />
}</p>
<p><span style="color: blue"> </span></p>
<p><span style="color: blue">public</span> <span style="color: blue">void</span> Draw(SpriteBatch batch)<br />
{<br />
<span style="color: blue"> </span>batch.Draw(textura, pos, Color.White);</p>
<p><span style="color: blue"> </span><span style="color: green">//Pintamos el disparo</span><br />
<span style="color: blue"> </span><span style="color: blue">if</span> (disp != <span style="color: blue">null</span>)<br />
<span style="color: blue"> </span>{<br />
<span style="color: blue"> </span>batch.Draw(disp.Textura, disp.Posicion, Color.White);<br />
<span style="color: blue"> </span>}<br />
}</div>
<h2></h2>
<h2></h2>
<h2><span style="text-decoration: underline;">Clase Game1.cs</span></h2>
<p align="justify">Y ya tenemos nuestra clase “Disparo”. Ahora nos falta agregar la lógica necesaria en<strong> “Game1.cs”.</strong></p>
<p align="justify">
<p align="justify">
<p align="justify">Lo que haremos en “Game1.cs” será definirnos y crearnos la nave:</p>
<div style="font-family: courier new"><span style="color: blue"> </span></div>
<div style="font-family: courier new">Nave nave;</div>
<p>Cargar las texturas necesarias para la nave y el disparo de la nave:</p>
<div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> LoadContent()<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: green">// Create a new SpriteBatch, which can be used to draw textures.</span><br />
<span style="color: blue"> </span><span style="color: blue"> </span>spriteBatch = <span style="color: blue">new</span> SpriteBatch(GraphicsDevice);<span style="color: blue"> </span><span style="color: green">//Le decimos a la nave que textura <span style="color: blue"> </span>tiene que cargar</span><br />
<span style="color: blue"> </span><span style="color: blue"> </span>nave.Textura = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&#8220;nave&#8221;</span>);<br />
<span style="color: blue"> </span><span style="color: blue"> </span>nave.TexturaDisparo = Content.Load&lt;Texture2D&gt;(<span style="color: maroon">&#8220;disparoNave&#8221;</span>);<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: green">// TODO: use this.Content to load your game content here</span><br />
}</div>
<p>Llamar al método actualizar de nuestra nave en cada bucle del juego:</p>
<div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> Update(GameTime gameTime)<br />
{<br />
<span style="color: blue"> </span><span style="color: green">// Allows the game to exit</span><br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">if</span> (Keyboard.GetState().IsKeyDown(Keys.Escape))<br />
<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">this</span>.Exit();<span style="color: blue"> </span><span style="color: green">// TODO: Add your update logic here</span></div>
<div style="font-family: courier new"><span style="color: green"> </span><span style="color: #008000;"> </span><br />
<span style="color: blue"> </span><span style="color: blue"> </span>nave.actualiza();</div>
<p style="font-family: courier new"><span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">base</span>.Update(gameTime);<br />
}</p>
<p align="justify">
<p align="justify">Y por ultimo pintar la nave. pero ahora como nuestra clase nave tiene un método para pintarse, simplemente llamaremos a ese método pasándole como argumento nuestro Spritebacht.</p>
<p align="justify">
<div style="font-family: courier new"><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> Draw(GameTime gameTime)<br />
{<br />
<span style="color: blue"> </span><span style="color: blue"> </span>GraphicsDevice.Clear(Color.Black); <span style="color: green">//Pintamos el fondo de negro</span><span style="color: blue"> </span><span style="color: green">// TODO: Add your <span style="color: blue"> </span>drawing code here</span><br />
<span style="color: blue"> </span><span style="color: blue"> </span>spriteBatch.Begin();<br />
<span style="color: blue"> </span><span style="color: blue"> </span>nave.Draw(spriteBatch);<br />
<span style="color: blue"> </span><span style="color: blue"> </span>spriteBatch.End();<span style="color: blue"> </span><span style="color: blue"> </span><span style="color: blue">base</span>.Draw(gameTime);<br />
}</div>
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">Y voilá!! Tenemos nuestra nave moviéndose por la pantalla, pero sin salirse de ella, y disparando con la tecla “Arriba”. Al igual que el Space Invaders, solo podemos tener un disparo en la pantalla.</p>
<p align="justify">
<p style="text-align: center"><img class="aligncenter" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/spinvaders2.png" border="0" alt="spinvaders" width="551" height="428" /></p>
<p align="justify">Como podéis observar, le he cambiado el color de fondo para que en lugar de azul sea negro. Además, he pintado la nave de blanco para que se vea mejor. Así conseguimos un estilo más “retro”.</p>
<p align="justify">
<p>Y como siempre, aquí tenéis el código fuente para poder probarlo vosotros mismos.</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial3.zip" target="_blank"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/down.png" border="0" alt="image" width="61" height="63" /></a> <a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/Tutorial3.zip" target="_blank">Descargar Código Fuente</a></p>
<p>Si tienes alguna duda con el tutorial, puedes preguntármela en el <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">foro</a>: <a href="http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4">http://www.foro.xna-tutorial.com/viewtopic.php?f=4&amp;t=4</a></p>
<p>Un saludo y hasta la próxima entrega, donde añadiremos a los enemigos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/tutorial-entrega-3-aadiendo-disparos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tutorial [Entrega 1]: Descargando el Software Necesario</title>
		<link>http://www.xna-tutorial.com/descargando-el-softwarare-necesario/</link>
		<comments>http://www.xna-tutorial.com/descargando-el-softwarare-necesario/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 10:42:19 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[space invaders]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=90</guid>
		<description><![CDATA[
Aprovechando el fin de semana, empezamos el tutorial en el que programaremos un clon del Space Invaders. Lo primero que tenemos que hacer es descargarnos todo el software que vamos a necesitar.
Para empezar ha hacer juegos con XNA, necesitamos una serie de programas especiales para poder empezar a programar. Pero que no cunda el pánico: [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: none;margin-left: auto;margin-right: auto" class="aligncenter size-full wp-image-92" alt="logoXNA" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/logoXNA.png" width="300" height="255" /></p>
<p>Aprovechando el fin de semana, empezamos el tutorial en el que programaremos un clon del <strong>Space Invaders</strong>. Lo primero que tenemos que hacer es descargarnos todo el software que vamos a necesitar.</p>
<p>Para empezar ha hacer juegos con XNA, necesitamos una serie de programas especiales para poder empezar a programar. Pero que no cunda el pánico: todo el software Microsoft lo ofrece gratuitamente. Así que no vas a tener necesidad de piratear nada, XD.</p>
<p>Para empezar, necesitamos un IDE de Microsoft. En concreto, necesitaremos <strong>Visual Studio 2008</strong> (de aquí en adelante, VS2008 o simplemente VS). Como este IDE es de pago (depende de donde lo compres, desde 600€ a 1500€) Microsoft nos ofrece la posibilidad de bajarnos una versión más limitada, pero totalmente gratuita llamada Visual C# Studio 2008 Express, que funcionará a la perfección para nuestro objetivo de hacer un juego.</p>
<p><span style="font-weight: bold"></span></p>
<p>&#160;</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image13.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image_thumb4.png" width="140" height="47" /></a> </p>
<p><span style="font-weight: bold">Visual C# Studio 2008 Express Edition</span> (<a href="http://www.microsoft.com/express/vcsharp/">Descargar</a>)     <br />Es gratuito y nos servirá para nuestro objetivo. Un IDE parecido a Visual Studio 2008 pero un poco más limitado. Totalmente válido para hacer juegos.</p>
<p><span style="font-weight: bold"></span></p>
<p><span style="font-weight: bold"></span></p>
<p><span style="font-weight: bold"></span></p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image14.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image_thumb5.png" width="157" height="76" /></a> </p>
<p><span style="font-weight: bold">XNA 3.1 FrameWork</span> (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=80782277-d584-42d2-8024-893fcd9d3e82&amp;displaylang=en">Descargar</a>)     <br />Las librerías que usaremos para hacer los juegos. Contiene las rutinas de bajo nivel para cargar música, imágenes, modelos 3D, etc&#8230; sin que nosotros tengamos que preocuparnos de ello.</p>
<p><strong></strong></p>
<p><strong></strong></p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image15.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="image" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/image_thumb6.png" width="68" height="71" /></a></p>
<p><strong>DirectX</strong> (<a href="http://www.microsoft.com/downloads/en/resultsForProduct.aspx?displaylang=en&amp;productID=9C954C37-1ED1-4846-8A7D-85FC422D1388">Descargar</a>)     <br />Casi todo el mundo tiene instalada la ultima versión de DirectX. Si no es tu caso y no tienes DirectX actualizado, puedes visitar la web de Microsoft y bajarte la última versión, aunque lo dicho, casi todo el mundo lo tiene instalado aunque no lo sepa.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Todas estas descargas están disponibles también en la web de XNA, llamada <a href="http://creators.xna.com/es-ES/downloads">XNA Creators Club</a>.</p>
<p>Una vez hayamos realizados las descargas, instalamos primero el Visual C# Studio y luego el XNA 3.1 (esto no hacia falta que lo dijera, no? XD) y ya podremos crear proyectos de XNA desde el Visual Studio.</p>
<p>En la próxima entrega os explicaré como crear un proyecto de XNA nuevo y hacer que un sprite se mueva por la pantalla.</p>
<p>Un saludo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/descargando-el-softwarare-necesario/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Creando un juego completo desde 0</title>
		<link>http://www.xna-tutorial.com/creando-un-juego-completo-desde-0/</link>
		<comments>http://www.xna-tutorial.com/creando-un-juego-completo-desde-0/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 19:22:45 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[space invaders]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=88</guid>
		<description><![CDATA[Hola a todos:
Os anuncio que dentro de unos días (aún estoy acabando algunos tutoriales) voy a empezar a explicar paso a paso como crear un juego en 2D programado con XNA. El juego no será excesivamente complejo, pero tampoco tan fácil como puede parecer. 
La idea es hacer un clon de Space Invaders. Ya os [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos:</p>
<p>Os anuncio que dentro de unos días (aún estoy acabando algunos tutoriales) voy a empezar a explicar paso a paso como crear un juego en 2D programado con XNA. El juego no será excesivamente complejo, pero tampoco tan fácil como puede parecer. </p>
<p>La idea es hacer un clon de <strong>Space Invaders. </strong>Ya os anticipo que no será el mejor clon, pero la idea es aprender como cargar sprites, mover un personaje, colisiones,&#160; lógica del juego, añadir menú del juego, gestion de estados, etc… vamos, tocar todos los aspectos que hacen falta en la creación de un juego. </p>
<p>El resultado será algo más o menos parecido a esto.</p>
<p><img style="float: none;margin-left: auto;margin-right: auto" class="aligncenter size-medium wp-image-89" alt="space-invaders" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/space-invaders-250x300.jpg" width="250" height="300" /></p>
<p>&#160;</p>
<p>Intentaré ir publicando los distintos apartados del manual poco a poco, aunque espero que sin pausa. </p>
<p>Espero que os gusten los tutoriales, y que sepáis que si tenéis alguna duda estamos aquí para ayudar.</p>
<p>&#160;</p>
<p>Un saludo a todos y nos vemos dentro de unos días con la 1º entrega del tutorial!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/creando-un-juego-completo-desde-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

