Tutorial [Entrega 4]: Añadiendo enemigos
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 foro: http://www.foro.xna-tutorial.com/viewtopic.php?f=4&t=4

Mira el tutorial después del salto.
Así que sigues interesado en XNA y el ejemplo del Space Invaders, eh? Pues aquí tienes como meter los enemigos.
Clase Enemigo.cs
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.
Atributos
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.
2 private Texture2D textura; //textura del enemigo
3
4 private Disparo disp; //disparo
5 private Texture2D texturaDisparo; //Textura del disparo
Y las propiedades para cada atributo:
2 {
3 get { return pos; }
4 set { pos = value; }
5 }
6
7 public Texture2D Textura
8 {
9 get { return textura; }
10 set { textura = value; }
11 }
12
13 public Disparo Disparo
14 {
15 get { return disp; }
16 set { disp = value; }
17 }
18
19 public Texture2D TexturaDisparo
20 {
21 get { return texturaDisparo; }
22 set { texturaDisparo = value; }
23 }
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”
Métodos
2 /// Constructor por defecto del enemigo
3 /// </summary>
4 public Enemigo()
5 {
6 pos = new Vector2(400,100);
7 }
8
9
10 /// <summary>
11 /// consturctor sobrecargado del enemigo donde le damos una pos inicial
12 /// </summary>
13 public Enemigo(Vector2 posicion)
14 {
15 pos = posicion;
16 }
17
18 /// <summary>
19 /// Comprueba el teclado y mueve la nave segun las teclas pulsadas
20 /// </summary>
21 public void actualiza()
22 {
23 //De momento nuestro enemigo no hace nada
24 }
25
26
27
28 /// <summary>
29 /// Pinta la nave y el disparo si lo tiene
30 /// </summary>
31 /// <param name="batch"></param>
32 public void Draw(SpriteBatch batch)
33 {
34 batch.Draw(textura, pos, Color.White);
35
36 //Pintamos el disparo
37 if (disp != null)
38 {
39 batch.Draw(disp.Textura, disp.Posicion, Color.White);
40 }
41 }
Ahora podemos introducir nuestros enemigos en el juego. Vamos a ver como los introducimos.
Clase “Game1.cs”
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.
Y en el método Initialize() inicializaremos el array:
2 {
3 // TODO: Add your initialization logic here
4 nave = new Nave();
5 enemigos = new ArrayList();
6
7
8 base.Initialize();
9 }
El método LoadContent() es el que más tela tiene, así que lo voy a comentar:
2 int numeroEnemigos = 5;
4 float Y = 100;
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.
7 {
8 Vector2 pos = new Vector2(X, Y);
9 Enemigo e = new Enemigo(pos);
10 enemigos.Add(e);
11 X += 50;
12 }
13
15 foreach(Enemigo e in enemigos)
16 {
17 e.Textura = Content.Load<Texture2D>("enemigo");
18 e.TexturaDisparo = Content.Load<Texture2D>("disparoNave");
19 }
Por cierto, aquí os dejo el sprite del enemigo:
![]()

Si le dais a” botón derecho/guardar imagen como” os podéis guardar el sprite.
Ahora queda pintar a los enemigos en la pantalla. Nota: El método update() me lo salto porque de momento los enemigos no hacen nada.
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:
2 {
3 e.Draw(spriteBatch);
4 }
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!!!
Y como siempre, el código fuente del tutorial:
Si tienes alguna duda con el tutorial, puedes preguntármela en el foro: http://www.foro.xna-tutorial.com/viewtopic.php?f=4&t=4
Un saludo a todos!
