<?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; 2D</title>
	<atom:link href="http://www.xna-tutorial.com/category/2d/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>Platformer Starter Kit Mejorado</title>
		<link>http://www.xna-tutorial.com/platformer-starter-kit-mejorado/</link>
		<comments>http://www.xna-tutorial.com/platformer-starter-kit-mejorado/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 12:29:15 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[Colisiones]]></category>
		<category><![CDATA[Fisica]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[extended]]></category>
		<category><![CDATA[platformes starter kit]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/platformer-starter-kit-mejorado/</guid>
		<description><![CDATA[Mirando en los foros de XNA me he encontrado con este topic: http://forums.xna.com/forums/t/34901.aspx
En el se ofrece el código fuente de un juego basado en el Starter Kit de plataformas que viene incluido con XNA a partir de la versión 3.0.
 

Contiene numerosas mejoras para partir de el para hacer un juego de plataformas en XNA.
Características:

Game [...]]]></description>
			<content:encoded><![CDATA[<p>Mirando en los <a href="http://forums.xna.com/forums" target="_blank">foros de XNA</a> me he encontrado con este topic: <a title="http://forums.xna.com/forums/t/34901.aspx" href="http://forums.xna.com/forums/t/34901.aspx">http://forums.xna.com/forums/t/34901.aspx</a></p>
<p>En el se ofrece el código fuente de un juego basado en el Starter Kit de plataformas que viene incluido con XNA a partir de la versión 3.0.</p>
<p><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/12/platformer.gif"><img style="float: none;margin-left: auto;margin-right: auto" alt="platformer" src="http://www.xna-tutorial.com/wp-content/uploads/2009/12/platformer_thumb.gif" width="300" height="416" /></a> </p>
<p><strong></strong></p>
<p>Contiene numerosas mejoras para partir de el para hacer un juego de plataformas en XNA.</p>
<p><strong>Características:</strong></p>
<ul><strong></strong>
<li>Game State Management (Menu)</li>
<li>Global Score     </li>
<li>Scrolling levels (vertical and horizontal)     </li>
<li>Custom level information from within the text file (Title, Time Limit, Description)</li>
<li>Level Select     </li>
<li>Falling Apples</li>
<li>Options</li>
<li>Built in BSOD (incase any error happens you can see what it is)</li>
<li>In Game Level Editor (Beta, saving part under progress)</li>
<li>Ladders</li>
<li>option for 320&#215;240 or 640&#215;480 (in the ScreenManager.cs, &quot;Game Configuration Fields&quot; region near top, set the &quot;useHighResolution&quot; to true or false)</li>
<li>A Racing opponent (Turns directions by bumping into walls, Jumps on assigned &quot;J&quot; tiles)</li>
<li>Vanishing Tiles</li>
<li>Hidden Tiles (Both Solid and platform)</li>
<li>Death Tiles</li>
<li>Skin selections</li>
<li>Powerups</li>
</ul>
<p>&#160;</p>
<p>El código fuente lo podéis descargar desde el enlace que proporciona el creador:&#160; <a title="http://www.mediafire.com/?ydyzwtilmkc" href="http://www.mediafire.com/?ydyzwtilmkc">http://www.mediafire.com/?ydyzwtilmkc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/platformer-starter-kit-mejorado/feed/</wfw:commentRss>
		<slash:comments>1</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>Libro electr&#243;nico XNA gratuito</title>
		<link>http://www.xna-tutorial.com/libro-electrnico-xna-gratuito/</link>
		<comments>http://www.xna-tutorial.com/libro-electrnico-xna-gratuito/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 09:23:00 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Colisiones]]></category>
		<category><![CDATA[Entrevistas]]></category>
		<category><![CDATA[Fisica]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[Jugabilidad]]></category>
		<category><![CDATA[Red]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[libro]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/libro-electrnico-xna-gratuito/</guid>
		<description><![CDATA[Desde la web www.facultyresourcecenter.com podemos descargarnos un fantastico libro gratuito de XNA. Está en inglés, pero no debería ser un problema para vosotros.
El libro se titula “Introduction to Programming Through Game Development Using Microsoft XNA Game Studio”. Ocupa sólo 9 Mb y si, está en inglés. Pero el ingles no debería ser un problema para [...]]]></description>
			<content:encoded><![CDATA[<p>Desde la web <a href="http://www.facultyresourcecenter.com">www.facultyresourcecenter.com</a> podemos descargarnos un fantastico libro gratuito de XNA. Está en inglés, pero no debería ser un problema para vosotros.</p>
<p>El libro se titula <strong>“Introduction to Programming Through Game Development Using Microsoft XNA Game Studio”.</strong> Ocupa sólo 9 Mb y si, está en inglés. Pero el ingles no debería ser un problema para vosotros. Además también puedes bajarte el ejemplo. Para ser gratuito, esta bastante bien.</p>
<p>Para bajaros el pdf, tenéis que pinchar en este enlace: <a title="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8119" href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8119">https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8119</a> y desde aquí darle a “Download”.</p>
<p>Os dejo con el temario del libro por si queréis consultar algún capitulo en especial.</p>
<blockquote>
</blockquote>
<ol>
<blockquote>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=7859">C# Development</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8168">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 1: Computers, C#, XNA and You</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8307">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 10: Using Methods</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8308">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 11: A Game as a Program</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8309">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 12: Games, Objects and State</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8315">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 13: Making a Complete Game</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8314">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 14: Classes, Objects and Games</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8318">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 15: Creating Game Components</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8317">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 16: Creating Multi-Player Networked Games</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8170">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 2: Programs and Colors</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8171">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 3: Getting Player Input</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8173">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 4: Displaying Images</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8174">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 5: Writing Text</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8175">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 6: Creating a Multi-Player Game</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8176">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 7: Playing Sounds</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8218">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 8: Creating a Timer</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8219">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Chapter 9: Reading Text Input</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8316">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Instructor Preparation Guide</a> </li>
<li><a href="https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8178">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio &#8211; Text Sample Code</a> </li>
</blockquote>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/libro-electrnico-xna-gratuito/feed/</wfw:commentRss>
		<slash:comments>0</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>Visualizador Animaciones 2D</title>
		<link>http://www.xna-tutorial.com/visualizador-animaciones-2d/</link>
		<comments>http://www.xna-tutorial.com/visualizador-animaciones-2d/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 12:00:32 +0000</pubDate>
		<dc:creator>rantamplan</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[visualizador animaciones]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=95</guid>
		<description><![CDATA[Hoy os traigo una herramienta que puede ser  muy útil para los desarrolladores de juegos 2D, ya que permite visualizar las animaciones de un sprite sin necesidad de compilar y arrancar el juego, además de poder configurar varios parámetros para poder ver la animación correctamente.
De esta forma, los dibujantes pueden ir trabajando paralelamente a los [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy os traigo una herramienta que puede ser  muy útil para los desarrolladores de juegos 2D, ya que permite visualizar las animaciones de un sprite sin necesidad de compilar y arrancar el juego, además de poder configurar varios parámetros para poder ver la animación correctamente.</p>
<p>De esta forma, los dibujantes pueden ir trabajando paralelamente a los programadores e ir adelantando trabajo, XD.</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 299px"><img class="size-medium wp-image-96" src="http://www.xna-tutorial.com/wp-content/uploads/2009/11/img2-289x300.png" alt="img2" width="289" height="300" /><p class="wp-caption-text">Visualizador Animaciones 2D</p></div>
<p><strong> </strong>Debido a la implementación del programa, sólo funciona correctamente cuando se cumple que:<br />
- Cada animación se encuentra en un fichero distinto. (Uno para la de saltar, otra para correr, otra para disparar….)<br />
- Todos los frames están en la misma fila (muchas columnas, pero sólo 1 fila).</p>
<p>Esto es debido a la implementación de la animaciones, ya que siguen el ejemplo del “Platformer Starter Kit” que viene con XNA 3.0.</p>
<p>En la web de descarga de XNACommunity puedes bajarte el código fuente del programa y (si quieres) modificarlo a tu antojo para que se adapte a tus necesidades. Además, en la web de descarga puedes leer como se usa el programa.</p>
<p><a href="http://xnacommunity.codeplex.com/wikipage?title=Visualizador2D&amp;ProjectName=xnacommunity">Descargate el código fuente desde XNACommunity</a>.</p>
<p>Un saludo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/visualizador-animaciones-2d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Agregar un sprite básico a tu juego</title>
		<link>http://www.xna-tutorial.com/tutorial-agregar-un-sprite-basico-a-tu-juego/</link>
		<comments>http://www.xna-tutorial.com/tutorial-agregar-un-sprite-basico-a-tu-juego/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 20:00:28 +0000</pubDate>
		<dc:creator>Agustin</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=105</guid>
		<description><![CDATA[Bueno, antes que nada quiero empezar por asumir que ya instalaron XNA 3.0 ó 3.1 en su sistema y estan usando visual studio: cualquier version que tengan.
Este tutorial usa Visual Studio 2008 + XNA 3.1, pero por la simplicidad XNA 3.0 es lo mismo.
Abriremos Visual Studio, y abriremos un nuevo proyecto. (Archivo + nuevo + [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Bueno, antes que nada quiero empezar por asumir que ya instalaron XNA 3.0 ó 3.1 en su sistema y estan usando visual studio: cualquier version que tengan.</p>
<p style="text-align: justify;">Este tutorial usa Visual Studio 2008 + XNA 3.1, pero por la simplicidad XNA 3.0 es lo mismo.</p>
<p style="text-align: justify;">Abriremos Visual Studio, y abriremos un nuevo proyecto. (Archivo + nuevo + projecto) y lo llamaremos: SpriteTest</p>
<p style="text-align: justify;">Una vez que la pantalla de visual studio muestre ya nuestro código por modificar notaremos lo siguiente:</p>
<ul style="text-align: justify;">
<li>La clase de nuestro se llama: Game1</li>
<li>Dentro de esta clase los métodos principales son:</li>
</ul>
<ol style="text-align: justify;">
<li>Initialize(); &#8211; Inicializa todo lo que va dentro del juego en forma de código</li>
<li>LoadContent(); &#8211; Obtiene la referencia de los objetos conforme a su localización física</li>
<li>Update(); &#8211; Este método es importante para actualizar nuestros objetos</li>
<li>Draw(); &#8211; Este método dibuja los objetos que queremos usar</li>
</ol>
<p style="text-align: justify;">Antes que nada, necesitamos agregar un sprite a nuestro proyecto, esto lo haremos en el folder de contenido, haremos un folder nuevo llamado Imágenes.</p>
<ol style="text-align: justify;">
<li>Click derecho en folder de contenido (parte izquierda del visual studio)</li>
<li>Agregar</li>
<li>Nuevo Folder (llamarlo Imágenes)</li>
</ol>
<p style="text-align: justify;">En este folder agregaremos el sprite que queremos utilizar, de la misma manera que agregamos el folder pero en lugar de agregar el folder, agregaremos un objeto existente. Pueden usar la imágen que quieran por la simplicidad no importa que imagen sea pero que sea suficientemente pequeña para que quepa en la pantalla.</p>
<p style="text-align: justify;">Ahora empieza lo interezante, El sprite básico en sí no lo podemos poner en el código y tratar de usarlo nadamas así, sino que necesitamos referenciarlo para que podamos reusar esta imágen cuantas veces queramos.</p>
<p style="text-align: justify;">Necesitamos agregar una variable de clase a nuestro juego,  el típo de variable es de tipo Texture2D, este tipo de variables es muy útil por que nos ayuda a agregar todo típo de imágenes en 2 dimensiones. puede ser fondos, fotos, imágenes etc.</p>
<p style="text-align: justify;">Al inicio de nuestra clase Game1 agregaremos la siguiente variable de textura:</p>
<p style="text-align: justify;">Texture2D textura;</p>
<p style="text-align: justify;">Señalando:</p>
<ul style="text-align: justify;">
<li>Texture2D &#8211; Tipo de la variable, tipo de variables que hay: int, float, string, Vector2&#8230; entre muchas otras</li>
<li>textura  - Nombre de la variable</li>
<li>;  - No se nos olvide el famoso &#8220;;&#8221; sin esto el código no correría es la terminación de código o línea de código</li>
</ul>
<p style="text-align: justify;">Una vez agregada esa variable al inicio, buscaremos el método de LoadContent(), puesto que ahi&#8230;.. Así es adivinaron! es donde referenciaremos la imágen con su nombre. Es decir, buscaremos la localización física de esta imágen y la coordinaremos con su nombre de variable (textura)</p>
<p style="text-align: justify;">en el método de LoadContent() agregaremos lo siguiente:</p>
<p style="text-align: justify;">textura = Content.Load&lt;Texture2D&gt;(@&#8221;Images\logo&#8221;);</p>
<p style="text-align: justify;">Cosas por notar:</p>
<ul style="text-align: justify;">
<li>Aqui estamos cargando la imágen y la estamos poniendo en la variable &#8220;textura&#8221;</li>
<li>Content.Load &#8211; Carga los objetos</li>
<li>&lt;Texture2D&gt; &#8211; El tipo de objeto por cargar</li>
<li>(@&#8221;Images\logo&#8221;) &#8211; el lugár físico de la imágen. Recuerden que agregamos la imágen al folder de contenido/imagenes</li>
</ul>
<p style="text-align: justify;">Una vez hecho esto la imágen ya esta lísta para ser mostrada, pero todvía no. Necesitamos dibujarla antes de poder verla en nuestra ventana de animación!</p>
<p style="text-align: justify;">Buscaremos el método de Draw() en el cuál dibujaremos la imágen o textura a nuestra ventana. En Draw() agregaremos el siguiente código:</p>
<p style="text-align: justify;">spriteBatch.Begin();</p>
<p style="text-align: justify;">spriteBatch.Draw(textura, Vector2.Zero, Color.White);</p>
<p style="text-align: justify;">spriteBatch.End();</p>
<p style="text-align: justify;">Cosas por notar:</p>
<ul style="text-align: justify;">
<li>spriteBatch.Begin() &#8211; inicializa la paleta de dibujo, los colores el espacio para poder agregar imágenes</li>
<li>spriteBatch.Draw() &#8211; dibuja el objeto o textura que estamos utilizando, en este caso adquiere 3 parametros:</li>
</ul>
<ol style="text-align: justify;">
<li>textura &#8211; Nombre de la Textura o Texture2D</li>
<li>Vector2.Zero &#8211; Posición de la textura</li>
<li>Color.White &#8211; Se podría decir que el tipo de luz que se le aplicara al objeto</li>
</ol>
<p style="text-align: justify;">Por fin ya esta dibujado y ya puden probar si funciona o no! construyan su proyecto (F5), y veamos como salió</p>
<p style="text-align: justify;">Podremos ver en la ventana que surge, nuestra imágen estática en la posición alta izquierda. La razón por la cuál esta en esa pocisión es por que nuestro código le esta diciendo que se vaya al orígen. Es decir Vector2.Zero en cierta forma es como decir posición: (0, 0)</p>
<p style="text-align: justify;"><img src="http://www.engsoc.net/~agutier2/images/Tutorials/2.png" alt="Resultado Final" /></p>
<p style="text-align: justify;">El código de fuente lo puedes encontrar <a href="http://www.engsoc.net/~agutier2/images/tutorials/SpriteTest.rar">aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/tutorial-agregar-un-sprite-basico-a-tu-juego/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Veks and Silence</title>
		<link>http://www.xna-tutorial.com/veks-and-silence/</link>
		<comments>http://www.xna-tutorial.com/veks-and-silence/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 06:51:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Jugabilidad]]></category>
		<category><![CDATA[videojuegos]]></category>
		<category><![CDATA[xna]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=60</guid>
		<description><![CDATA[Se vislumbran brotes verdes, después del inicio a trompicones de los desarrolladores, empiezan a surgir juegos que merece la pena jugar, son juegos que ya tienen un mínimo nivel de gráficos y una jugabilidad que echamos de menos en los juegos de nueva generación.
Es un juego mata-zombies nada mejor para dejar de lado el estres [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Se vislumbran brotes verdes, después del inicio a trompicones de los desarrolladores, empiezan a surgir <strong>juegos </strong>que merece la pena jugar, son juegos que ya tienen un mínimo nivel de <strong>gráficos </strong>y una jugabilidad que echamos de menos en los juegos de nueva generación.</p>
<p style="text-align: justify;">Es un <strong>juego mata-zombies</strong> nada mejor para dejar de lado el estres laboral en un entorno amigable, con zombies que rebientan en mil pedazos y sangre para dar y regalar. En cuanto a la inteligencia artificial es muy simple, la misma que tienen los zombies &#8220;en la vida real&#8221;, es decir, veo un cacho carne y a por el.</p>
<p style="text-align: justify;">El juego esta desarrollado en <strong>3d </strong>pero es un 2d con scrolling, se hecha de menos el tener un compañero de batalla al lado que nos ayude a esparcir sangre zombie por todo el escenario pero aun así cumple con su cometido, entretener con un nivel aceptable de gráficos. Seguro que estaís deseando ver algunas capturas de pantalla, pero os lo voy a poner mejor, os dejo un video game play.<br />
<!-- google_ad_section_start(weight=ignore) --><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="580" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/iUktVh4PzTo&amp;hl=es&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="580" height="360" src="http://www.youtube.com/v/iUktVh4PzTo&amp;hl=es&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<!-- google_ad_section_end(weight=ignore) --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/veks-and-silence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DishWasher: Dead Samurai</title>
		<link>http://www.xna-tutorial.com/dishwasher-dead-samurai/</link>
		<comments>http://www.xna-tutorial.com/dishwasher-dead-samurai/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:00:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[2D]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[animacion]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://www.xna-tutorial.com/?p=31</guid>
		<description><![CDATA[Os traigo un juego que tiene muy buena pinta y ademas una buena idea por detrás. El juego tiene como finalidad soltar adrenalina, es un juego mata mata, donde abunda la sangre y los movimientos especiales.  Realmente descarga tensiones y es recomendable si acabas de llegar del trabajo con el cuello engarrotado por culpa del [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Os traigo un <strong>juego </strong>que tiene muy buena pinta y ademas una buena idea por detrás. El juego tiene como finalidad soltar <strong>adrenalina</strong>, es un juego mata mata, donde abunda la sangre y los movimientos especiales.  Realmente descarga tensiones y es recomendable si acabas de llegar del trabajo con el cuello engarrotado por culpa del jefe. Veamos un video <strong>trailer </strong>y luego hablamos un poco de la programación que hay detrás.<br />
<!-- google_ad_section_start(weight=ignore) --><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="620" height="490" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/im8pSPeUorY&amp;hl=es&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" /><embed type="application/x-shockwave-flash" width="620" height="490" src="http://www.youtube.com/v/im8pSPeUorY&amp;hl=es&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<!-- google_ad_section_end(weight=ignore) --></p>
<p style="text-align: justify;">Como habeis podido ver en el video las <strong>animaciones son acojonantes</strong>, pero no dispone de animaciones, estas son construidas mediante rotaciones y translaciones. El muñecajo esta dividido en <strong>partes</strong>, y realizar un movimiento supone calcular la rotacion y posicion de cada parte y unirlas todas juntas. Esto tiene muchisima programación pero el resultado lo merece.</p>
<p style="text-align: justify;"><a href="http://www.xna-tutorial.com/wp-content/uploads/2009/04/wash1.png"><img class="alignnone size-full wp-image-33" title="wash1" src="http://www.xna-tutorial.com/wp-content/uploads/2009/04/wash1.png" alt="" width="620" height="500" /></a></p>
<p>Algun dia si tengo tiempo (que va a ser que no) intentaremos hacer un <strong>ejemplo </strong>sencillito de esta idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xna-tutorial.com/dishwasher-dead-samurai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

