Ya tenemos nuestra nave con un arma para detonar las minas y defenderse, pero estas desaparecen cuando son destruidas. Aburrido, verdad? En esta parte de nuestro juego ejemplo de XNA implementaremos el despliegue de explosiones para los enemigos destruidos por la aeronave.
En la clase Game1
Comienza agregando lo siguientes atributos:
Texture2D explosionTexture; List<Animation> explosions;
Estamos declarando la textura que tendrá el efecto de animación de la explosión, y una lista de Animacion para las explosiones, ya que puede que más de un enemigo sea destruido por el Jugador dentro de la escena, ocasionando múltiples explosiones. En el método Initialize, agrega esta línea al final:
explosions = new List<Animation>();
Simplemente estamos instanciando la lista de explosiones. Ahora en el LoadContent al final, cargaremos la imagen de explosión en nuestra textura con la siguiente instrucción:
explosionTexture = Content.Load<Texture2D>("explosion");
Es necesario contar con un método para agregar explosiones a la lista, para eso creamos el método AddExplosion, como se ve a continuación:
private void AddExplosion(Vector2 position)
{
Animation explosion = new Animation();
explosion.Initialize(explosionTexture,position,
134, 134, 12, 45, Color.White, 1f,false);
explosions.Add(explosion);
}
Análogo cuando implementamos los enemigos, este método instancia una animación, la inicializa y finalmente la agrega en la lista de explosiones. Ahora el detalle es, Cuando llamamos este método? Ese es el truco, debemos llamarlo cuando la vida de los enemigos sea menor o igual a cero. Ve al método UpdateEnemies, y dentro de la instrucción if(enemies[i].Active == false), agrega las siguientes instrucciones debajo de ‘{‘:
// Si la vida del enemigo i es <= 0
if (enemies[i].Health <= 0)
{
// Agregamos una explosion
AddExplosion(enemies[i].Position);
}
Nota que cuando la condición se cumple, le estamos pasando como parámetro cuál enemigo esta siendo destruido, y la posición donde se mostrara la explosión. Ahora agregaremos el método UpdateExplosions para actualizar los elementos de explosión en la escena:
private void UpdateExplosions(GameTime gameTime)
{
for (int i = explosions.Count - 1; i >= 0; i--)
{
explosions[i].Update(gameTime);
if (explosions[i].Active == false)
{
explosions.RemoveAt(i);
}
}
}
Ahora debemos invocar este método en Update, después de UpdateProjectiles():
// Actualizando las explosiones UpdateExplosions(gameTime);
En cuanto al método Draw, debemos dibujar todos los elementos de la lista de explosiones. Agrega las siguientes líneas de instrucciones al final del método:
// Dibujamos las explosiones
for (int i = 0; i < explosions.Count; i++)
{
explosions[i].Draw(spriteBatch);
}
Ya terminamos de implementar las explosiones. Ahora arma la solucion y ejecuta el juego. Si todo esta bien codificado, se debera desplegar nuestro juego, y la aeronave destruyendo las minas, causando multiples explosiones. Aqui te muestro el snapshot del juego ejemplo en ejecucion con explosiones.
Ya ves el juego mas llamativo, verdad? Sin embargo, le faltan efectos de sonido a nuestro Shooter para hacerlo mas interesante. Ese será el siguiente paso. Puedes descargarte el proyecto en este punto dando clic en el siguiente enlace:



















