SlideShare una empresa de Scribd logo
1 de 26
Bladimir Díaz Campos
Bladimir.diaz@ues.edu.sv
bdiaz@eisi.ues.edu.sv
Un explorador espacial y queda atrapado en un campo de
asteroides. ¿Por cuanto tiempo es posible resistir?
•El jugador puede moverse libremente alrededor de la pantalla.
•Los asteroides aparecen al inicio de la pantalla y se mueven
hacia abajo con un ángulo y una velocidad aleatoria. Después de
algún tiempo se adicionan mas asteroides
•La puntuación es dada por el número de asteroides que se
esquivan en la pantalla.
•Si el jugador colisiona con alguno de ellos, le puntaje se torna
cero y el juego se reinicia a su estado inicial
•Pensando como programadores tenemos: Nave
Espacial, Asteroides y Puntajes (objetos del juego).
•Se debe detallar antes de iniciar el proyectos
(características y comportamiento).
•Una correcta definición del comportamiento y del
estado de los objetos del juego son las tareas mas
desafiantes en la programación
•Vamos a tener solo tres efectos de sonido: sonar
música cuando el juego este activo, un sonido cuando
un asteroide nuevo esta en la pantalla y una explosión
cuando se presenta una colisión
Es un folder especial donde colocamos objetos como:
imágenes, sonidos y otros que van a ser cargados a
través del Content Pipeline
Adicionamos el fondo
En este caso tenemos dentro de una misma imagen 3
elementos del juego: la nave espacial y los asteroides
1. Creamos la variable para los asteroides
2. Luego la cargamos
Ahora se va a crear una clase que representa
al jugador:
1. Adicionamos un nuevo GameComponent
al proyecto, con el nombre de Nave.cs
 Este componente es agregado al proyecto, el cual
contiene una clase derivada de GameComponent, este
no es visible en juego, por lo que no puede dibujar.
Derivando de DrawableGameComponent, se tiene un
método Draw que se pude utilizar para dibujar en el
juego, y este que ocuparemos.
Este componente copia la región de la textura que
contiene la imagen de la nave espacial en una
posición especifica. Para lograr esto lo único que
necesitamos son las coordenadas de donde se
encuentra la imagen y la coordenada de la imagen
donde será renderizada.
Existen dos pasos bien definidos en
DrawableGameComponent. En el método
Draw() se copia la figura en la pantalla y en el
método update() se actualizad la pantalla de
acuerdo al estado del gamepad o del teclado
(todo esta esta definido en la clase nave.cs que se
crea)
Para lograr probar el colocar la nave en la pantalla y probar el
GameComponent,se crea un metodo llamado iniciar() que sera utilizado para
inicializar los objetos (en el inicio solo el jugador)
private void Iniciar()
{
// Creamos si es necesario y colocamos el jugador en la posicion incial
if (player == null)
{
// Adicionamos el jugador
player = new Ship(this, ref meteorTexture);
Components.Add(player);
}
player.PutinStartPosition();
}
Note que la variable jugador, debe ser declarada al inicio de la clase game1
Private Nave jugador
Recordemos que todas la variables que estan antes utilizadas, se deben de
declarar antes¡
Luego debemos modificar la funcion Update y modificamos como sigue:
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
estadoGamepad = GamePad.GetState(PlayerIndex.One);
tecla = Keyboard.GetState();
if ((estadoGamepad.Buttons.Back== ButtonState.Pressed) ||
(tecla.IsKeyDown(Keys.Escape)))
this.Exit();
if (jugador == null)
Iniciar();
// TODO: Add your update logic here
base.Update(gameTime);
}
Para crear la lluvia de asteroides, deberemos proceder de la misma manera,
creando la clase, definiendo comportamientos, etc.
Y dentro del método Iniciar() adicionamos el siguiente código:
private void Iniciar()
{
// Creamos si es necesario y colocamos el jugador en la posicion incial
if (jugador == null)
{
// Adicionamos el jugador
jugador = new Nave(this,ref asteroideTextura );
Components.Add(jugador);
}
jugador.ColocarPosicionInicial();
// Adiciona los asteroides
for (int i = 0; i < INICIAASTEROIDES; i++)
Components.Add(new asteroide(this, ref asteroideTextura));
// inicializa el contador
ultimoConteo = System.Environment.TickCount;
// resetea el contador de rocas
cuentaRocas = INICIAASTEROIDES;
}
Para adicionar el sonido, usaremos 3 sonidos:
1. Explosion.wav: cuando el jugador colisiona con un asteroide
2. Backmusic.wav: La música de fondo del juego
3. Newmeteor.wav: Suena cuando un nuevo asteroide es
adicionado al juego
Creamos un nuevo proyecto XACT y adicionamos estos archivos,
guardamos el proyecto con el nombre de audio.xap.
Y para manejar estos objetos vamos a crear de nuevo otro nuevo
GameComponent con el nombre Audio, para el cual tenemos
el siguiente codigo
 #region Using Statements
 using System;
 using System.Collections.Generic;
 using Microsoft.Xna.Framework;
 using Microsoft.Xna.Framework.Audio;
 #endregion
 namespace tormentaEspacial
 {
 /// <summary>
 /// Manejamos los componentes de audio del juego
 /// </summary>
 public class audio :
Microsoft.Xna.Framework.GameComponent
 {
 private AudioEngine motoraudio;
 private WaveBank bancowave;
 private SoundBank bancosonido;
 public audio(Game game)
 : base(game)
 {
 // TODO: Construct any child components
here
 }
 /// <summary>
 /// Allows the game component to perform any
initialization it needs to before starting
 /// to run. This is where it can query for any
required services and load content.
 /// </summary>
 public override void Initialize()
 {
 // Iniciamos el motor del sonido
 motoraudio = new AudioEngine("audio.xgs");
 bancowave = new WaveBank(motoraudio,
"Wave Bank.wsb");
 if (bancowave != null)
 {
 bancosonido = new SoundBank(motoraudio,
"Sound Bank.xsb");
 }
 base.Initialize();
 }
 /// <summary>
 /// Allows the game component to update itself.
 /// </summary>
 /// <param name="gameTime">Provides a
snapshot of timing values.</param>
 public override void Update(GameTime
gameTime)
 {
 motoraudio.Update();
 base.Update(gameTime);
 }
 public void SuenaPista(string pista)
 {
 bancosonido.PlayCue(pista);
 }
 }
 }
Agregamos la siguiente línea de código a la clase Game1
private audio componenteAudio;
Inicializamos los sonidos en el metodo Initialize() de la siguiente
manera
protected override void Initialize()
{
componenteAudio = new audio(this);
Components.Add(componenteAudio);
base.Initialize();
// inicia la musica de fondo
componenteAudio.SuenaPista("backmusic");
}
Y dentro del mètodo lgica del juego, donde se produce la colision se
agrega:
//Explosion
componenteAudio.SuenaPista("explosion");
También abra que adicionar otra pista cuando u asteroide es
adicionado al juego, para lo que buscamos la línea donde esta
cuentaRocas++;
Y antes de ella adicionamos el código
componenteAudio.SuenaPista("newmeteor");
Para esto lo podemos hacer dentrodel método Draw de
la clase Game1 adicionando un SpriteFont,.
Primero declaramos el objeto para esto
private SpriteFont fuenteJuego;
Y luego inicalizamos el objeto en el método
LoadContent()
fuenteJuego = Content.Load <SpriteFont> ("font");
Ahora lo que nos queda es dibujar las fuentesdespues
de que dibujamos los sprites, por lo que dentro del
método Draw tendriamos el siguiente código
// Dibujar el marcador
spriteBatch.Begin();
spriteBatch.DrawString(fuenteJuego,
"Asteroides: " + cuentaRocas.ToString(), new
Vector2(15, 15), Color.YellowGreen);
spriteBatch.End();
Como siempre deberíamos de agregar un GameComponent
Y un código de la siguiente manera
 #region Using Statements
 using System;
 using System.Collections.Generic;
 using Microsoft.Xna.Framework;
 using Microsoft.Xna.Framework.Input;
 #endregion
 namespace tormentaEspacial
 {
 /// <summary>
 /// Este componente ayuda con los controles de la Xbox
 /// </summary>
 public class vibracion :
Microsoft.Xna.Framework.GameComponent
 {
 private int tiempo;
 private int ultimoConteo;
 public vibracion(Game game)
 : base(game)
 {
 // TODO: Construct any child components here
 }
 /// <summary>
 /// Allows the game component to perform any
initialization it needs to before starting
 /// to run. This is where it can query for any required
services and load content.
 /// </summary>
 public override void Initialize()
 {
 // TODO: Add your initialization code here
 base.Initialize();
 }
 /// <summary>
 /// Allows the game component to update itself.
 /// </summary>
 /// <param name="gameTime">Provides a snapshot of
timing values.</param>
 public override void Update(GameTime gameTime)
 {
 if (tiempo > 0)
 {
 int pasado = System.Environment.TickCount -
ultimoConteo;
 if (pasado >= tiempo)
 {
 tiempo = 0;
 GamePad.SetVibration(PlayerIndex.One, 0, 0);
 }
 }
 base.Update(gameTime);
 }
 protected override void Dispose(bool disposing)
 {
 GamePad.SetVibration(PlayerIndex.One, 0, 0);
 base.Dispose(disposing);
 }
 public void RumblePad(int Tiempo, float MotorIzquierdo,
float MotorDerecho)
 {
 ultimoConteo = System.Environment.TickCount;
 tiempo = Tiempo;
 GamePad.SetVibration(PlayerIndex.One, MotorIzquierdo,
MotorDerecho);
 }
 }
 }
Creamos el objeto que cuasa el efecto de vibracion
//Objeto para el efecto
private vibracion VivraPad;
Y luego en el método Initialize() de la clase Game1
VivraPad = new vibracion(this);
Components.Add(VivraPad);
Y por ultimo para crear la vibración al momento de chocar se agrega la
siguiente línea de código, donde verificamos la colisión
VivraPad.RumblePad(500, 1.0f, 1.0f);
Ahora ya se tiene el juego completo, si se quiere hacer
una copia para que se ejecute en la Xbox, click derecho
en el solution explorer y luego……

Más contenido relacionado

La actualidad más candente

Reductor de lag por un compatriota de elword ^^
Reductor de lag por un compatriota de elword ^^Reductor de lag por un compatriota de elword ^^
Reductor de lag por un compatriota de elword ^^Eden Bezaly
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Manual De Clonezilla
Manual De ClonezillaManual De Clonezilla
Manual De Clonezillaamauri95
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iteratorjubacalo
 
Comandos de cod
Comandos de codComandos de cod
Comandos de codjoel_vega
 
Clonar discos duros con clonezilla live por medio de ssh
Clonar discos duros con clonezilla live por medio de sshClonar discos duros con clonezilla live por medio de ssh
Clonar discos duros con clonezilla live por medio de sshcesar584
 
Java HashMap
Java HashMapJava HashMap
Java HashMapjubacalo
 

La actualidad más candente (15)

Programación con Pygame IV
Programación con Pygame IVProgramación con Pygame IV
Programación con Pygame IV
 
Manual VMware y Virtual Box
Manual VMware y Virtual BoxManual VMware y Virtual Box
Manual VMware y Virtual Box
 
Programación con Pygame V
Programación con Pygame VProgramación con Pygame V
Programación con Pygame V
 
Reductor de lag por un compatriota de elword ^^
Reductor de lag por un compatriota de elword ^^Reductor de lag por un compatriota de elword ^^
Reductor de lag por un compatriota de elword ^^
 
Programación con Pygame VI
Programación con Pygame VIProgramación con Pygame VI
Programación con Pygame VI
 
Programación con Pygame IX
Programación con Pygame IXProgramación con Pygame IX
Programación con Pygame IX
 
E ps xe_sp
E ps xe_spE ps xe_sp
E ps xe_sp
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Arkanoid en lenguaje vhdl
Arkanoid en lenguaje vhdlArkanoid en lenguaje vhdl
Arkanoid en lenguaje vhdl
 
Manual De Clonezilla
Manual De ClonezillaManual De Clonezilla
Manual De Clonezilla
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iterator
 
Comandos de cod
Comandos de codComandos de cod
Comandos de cod
 
Clonar discos duros con clonezilla live por medio de ssh
Clonar discos duros con clonezilla live por medio de sshClonar discos duros con clonezilla live por medio de ssh
Clonar discos duros con clonezilla live por medio de ssh
 
Manual y temario unity
Manual y temario unityManual y temario unity
Manual y temario unity
 
Java HashMap
Java HashMapJava HashMap
Java HashMap
 

Similar a Presentacion03

6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGameVictor Aravena
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01Juan Cardona
 
Unity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxUnity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxVictor Marin
 
2. tutorial unity3d-disparo
2.  tutorial unity3d-disparo2.  tutorial unity3d-disparo
2. tutorial unity3d-disparoVictor Aravena
 
2. tutorial unity3d-disparo
2.  tutorial unity3d-disparo2.  tutorial unity3d-disparo
2. tutorial unity3d-disparoVictor Aravena
 
Codigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docxCodigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docxEdwinAntonioSegoviaD
 
Mapa y obstaculos
Mapa y obstaculosMapa y obstaculos
Mapa y obstaculosptty01
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5Plain Concepts
 
Practica juegos Agentes Inteligentes
Practica juegos Agentes InteligentesPractica juegos Agentes Inteligentes
Practica juegos Agentes InteligentesJoaquin Lozano
 
Develop Mobile Apps with Corona SDK
Develop Mobile Apps with Corona SDKDevelop Mobile Apps with Corona SDK
Develop Mobile Apps with Corona SDKAlberto Dominguez
 
Entrada 3
Entrada 3Entrada 3
Entrada 3ptty01
 
Entrada 4
Entrada 4Entrada 4
Entrada 4ptty01
 
Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02Juan Cardona
 
Programa simple java julian
Programa simple java julianPrograma simple java julian
Programa simple java juliancoruniversitec
 

Similar a Presentacion03 (20)

Presentacion420
Presentacion420Presentacion420
Presentacion420
 
Presentacion420
Presentacion420Presentacion420
Presentacion420
 
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame6.  revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
6. revisión y modificación del juego -“space blaster”- Construct 5 - VideoGame
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01
 
Unity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxUnity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptx
 
2. tutorial unity3d-disparo
2.  tutorial unity3d-disparo2.  tutorial unity3d-disparo
2. tutorial unity3d-disparo
 
2. tutorial unity3d-disparo
2.  tutorial unity3d-disparo2.  tutorial unity3d-disparo
2. tutorial unity3d-disparo
 
Codigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docxCodigo Explicado Rompe Bloques.docx
Codigo Explicado Rompe Bloques.docx
 
Tutorial unity3d 1_español
Tutorial unity3d 1_españolTutorial unity3d 1_español
Tutorial unity3d 1_español
 
Mapa y obstaculos
Mapa y obstaculosMapa y obstaculos
Mapa y obstaculos
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Tutorial de flash
Tutorial de flashTutorial de flash
Tutorial de flash
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5
 
Practica juegos Agentes Inteligentes
Practica juegos Agentes InteligentesPractica juegos Agentes Inteligentes
Practica juegos Agentes Inteligentes
 
Develop Mobile Apps with Corona SDK
Develop Mobile Apps with Corona SDKDevelop Mobile Apps with Corona SDK
Develop Mobile Apps with Corona SDK
 
Entrada 3
Entrada 3Entrada 3
Entrada 3
 
Entrada 4
Entrada 4Entrada 4
Entrada 4
 
Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02
 
Intro pygamev2
Intro pygamev2Intro pygamev2
Intro pygamev2
 
Programa simple java julian
Programa simple java julianPrograma simple java julian
Programa simple java julian
 

Más de Titiushko Jazz

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Titiushko Jazz
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Titiushko Jazz
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingTitiushko Jazz
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlTitiushko Jazz
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eilyTitiushko Jazz
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico prácticoTitiushko Jazz
 

Más de Titiushko Jazz (20)

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y datamining
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
 
Unidad ii esp parte 2
Unidad ii esp parte 2Unidad ii esp parte 2
Unidad ii esp parte 2
 
Unidad ii esp parte 1
Unidad ii esp parte 1Unidad ii esp parte 1
Unidad ii esp parte 1
 
Unidad i esp parte 2
Unidad i esp parte 2Unidad i esp parte 2
Unidad i esp parte 2
 
Unidad i esp parte 1
Unidad i esp parte 1Unidad i esp parte 1
Unidad i esp parte 1
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eily
 
Sociedades limitadas
Sociedades limitadasSociedades limitadas
Sociedades limitadas
 
Rhu
RhuRhu
Rhu
 
Qué es un proyecto
Qué es un proyectoQué es un proyecto
Qué es un proyecto
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico práctico
 
Presentacion1630
Presentacion1630Presentacion1630
Presentacion1630
 
Presentacion1410
Presentacion1410Presentacion1410
Presentacion1410
 
Presentacion1310
Presentacion1310Presentacion1310
Presentacion1310
 
Presentacion1210
Presentacion1210Presentacion1210
Presentacion1210
 
Presentacion1220
Presentacion1220Presentacion1220
Presentacion1220
 
Presentacion1001
Presentacion1001Presentacion1001
Presentacion1001
 
Presentacion810
Presentacion810Presentacion810
Presentacion810
 

Presentacion03

  • 2. Un explorador espacial y queda atrapado en un campo de asteroides. ¿Por cuanto tiempo es posible resistir?
  • 3. •El jugador puede moverse libremente alrededor de la pantalla. •Los asteroides aparecen al inicio de la pantalla y se mueven hacia abajo con un ángulo y una velocidad aleatoria. Después de algún tiempo se adicionan mas asteroides •La puntuación es dada por el número de asteroides que se esquivan en la pantalla. •Si el jugador colisiona con alguno de ellos, le puntaje se torna cero y el juego se reinicia a su estado inicial
  • 4. •Pensando como programadores tenemos: Nave Espacial, Asteroides y Puntajes (objetos del juego). •Se debe detallar antes de iniciar el proyectos (características y comportamiento). •Una correcta definición del comportamiento y del estado de los objetos del juego son las tareas mas desafiantes en la programación •Vamos a tener solo tres efectos de sonido: sonar música cuando el juego este activo, un sonido cuando un asteroide nuevo esta en la pantalla y una explosión cuando se presenta una colisión
  • 5.
  • 6. Es un folder especial donde colocamos objetos como: imágenes, sonidos y otros que van a ser cargados a través del Content Pipeline
  • 8. En este caso tenemos dentro de una misma imagen 3 elementos del juego: la nave espacial y los asteroides
  • 9. 1. Creamos la variable para los asteroides 2. Luego la cargamos
  • 10. Ahora se va a crear una clase que representa al jugador: 1. Adicionamos un nuevo GameComponent al proyecto, con el nombre de Nave.cs
  • 11.  Este componente es agregado al proyecto, el cual contiene una clase derivada de GameComponent, este no es visible en juego, por lo que no puede dibujar. Derivando de DrawableGameComponent, se tiene un método Draw que se pude utilizar para dibujar en el juego, y este que ocuparemos.
  • 12. Este componente copia la región de la textura que contiene la imagen de la nave espacial en una posición especifica. Para lograr esto lo único que necesitamos son las coordenadas de donde se encuentra la imagen y la coordenada de la imagen donde será renderizada.
  • 13. Existen dos pasos bien definidos en DrawableGameComponent. En el método Draw() se copia la figura en la pantalla y en el método update() se actualizad la pantalla de acuerdo al estado del gamepad o del teclado (todo esta esta definido en la clase nave.cs que se crea)
  • 14. Para lograr probar el colocar la nave en la pantalla y probar el GameComponent,se crea un metodo llamado iniciar() que sera utilizado para inicializar los objetos (en el inicio solo el jugador) private void Iniciar() { // Creamos si es necesario y colocamos el jugador en la posicion incial if (player == null) { // Adicionamos el jugador player = new Ship(this, ref meteorTexture); Components.Add(player); } player.PutinStartPosition(); } Note que la variable jugador, debe ser declarada al inicio de la clase game1 Private Nave jugador Recordemos que todas la variables que estan antes utilizadas, se deben de declarar antes¡
  • 15. Luego debemos modificar la funcion Update y modificamos como sigue: protected override void Update(GameTime gameTime) { // Allows the game to exit estadoGamepad = GamePad.GetState(PlayerIndex.One); tecla = Keyboard.GetState(); if ((estadoGamepad.Buttons.Back== ButtonState.Pressed) || (tecla.IsKeyDown(Keys.Escape))) this.Exit(); if (jugador == null) Iniciar(); // TODO: Add your update logic here base.Update(gameTime); }
  • 16. Para crear la lluvia de asteroides, deberemos proceder de la misma manera, creando la clase, definiendo comportamientos, etc. Y dentro del método Iniciar() adicionamos el siguiente código: private void Iniciar() { // Creamos si es necesario y colocamos el jugador en la posicion incial if (jugador == null) { // Adicionamos el jugador jugador = new Nave(this,ref asteroideTextura ); Components.Add(jugador); } jugador.ColocarPosicionInicial(); // Adiciona los asteroides for (int i = 0; i < INICIAASTEROIDES; i++) Components.Add(new asteroide(this, ref asteroideTextura)); // inicializa el contador ultimoConteo = System.Environment.TickCount; // resetea el contador de rocas cuentaRocas = INICIAASTEROIDES; }
  • 17. Para adicionar el sonido, usaremos 3 sonidos: 1. Explosion.wav: cuando el jugador colisiona con un asteroide 2. Backmusic.wav: La música de fondo del juego 3. Newmeteor.wav: Suena cuando un nuevo asteroide es adicionado al juego Creamos un nuevo proyecto XACT y adicionamos estos archivos, guardamos el proyecto con el nombre de audio.xap. Y para manejar estos objetos vamos a crear de nuevo otro nuevo GameComponent con el nombre Audio, para el cual tenemos el siguiente codigo
  • 18.  #region Using Statements  using System;  using System.Collections.Generic;  using Microsoft.Xna.Framework;  using Microsoft.Xna.Framework.Audio;  #endregion  namespace tormentaEspacial  {  /// <summary>  /// Manejamos los componentes de audio del juego  /// </summary>  public class audio : Microsoft.Xna.Framework.GameComponent  {  private AudioEngine motoraudio;  private WaveBank bancowave;  private SoundBank bancosonido;  public audio(Game game)  : base(game)  {  // TODO: Construct any child components here  }  /// <summary>  /// Allows the game component to perform any initialization it needs to before starting  /// to run. This is where it can query for any required services and load content.  /// </summary>  public override void Initialize()  {  // Iniciamos el motor del sonido  motoraudio = new AudioEngine("audio.xgs");  bancowave = new WaveBank(motoraudio, "Wave Bank.wsb");  if (bancowave != null)  {  bancosonido = new SoundBank(motoraudio, "Sound Bank.xsb");  }  base.Initialize();  }  /// <summary>  /// Allows the game component to update itself.  /// </summary>  /// <param name="gameTime">Provides a snapshot of timing values.</param>  public override void Update(GameTime gameTime)  {  motoraudio.Update();  base.Update(gameTime);  }  public void SuenaPista(string pista)  {  bancosonido.PlayCue(pista);  }  }  }
  • 19. Agregamos la siguiente línea de código a la clase Game1 private audio componenteAudio; Inicializamos los sonidos en el metodo Initialize() de la siguiente manera protected override void Initialize() { componenteAudio = new audio(this); Components.Add(componenteAudio); base.Initialize(); // inicia la musica de fondo componenteAudio.SuenaPista("backmusic"); } Y dentro del mètodo lgica del juego, donde se produce la colision se agrega: //Explosion componenteAudio.SuenaPista("explosion");
  • 20. También abra que adicionar otra pista cuando u asteroide es adicionado al juego, para lo que buscamos la línea donde esta cuentaRocas++; Y antes de ella adicionamos el código componenteAudio.SuenaPista("newmeteor");
  • 21. Para esto lo podemos hacer dentrodel método Draw de la clase Game1 adicionando un SpriteFont,. Primero declaramos el objeto para esto private SpriteFont fuenteJuego; Y luego inicalizamos el objeto en el método LoadContent() fuenteJuego = Content.Load <SpriteFont> ("font");
  • 22. Ahora lo que nos queda es dibujar las fuentesdespues de que dibujamos los sprites, por lo que dentro del método Draw tendriamos el siguiente código // Dibujar el marcador spriteBatch.Begin(); spriteBatch.DrawString(fuenteJuego, "Asteroides: " + cuentaRocas.ToString(), new Vector2(15, 15), Color.YellowGreen); spriteBatch.End();
  • 23. Como siempre deberíamos de agregar un GameComponent Y un código de la siguiente manera
  • 24.  #region Using Statements  using System;  using System.Collections.Generic;  using Microsoft.Xna.Framework;  using Microsoft.Xna.Framework.Input;  #endregion  namespace tormentaEspacial  {  /// <summary>  /// Este componente ayuda con los controles de la Xbox  /// </summary>  public class vibracion : Microsoft.Xna.Framework.GameComponent  {  private int tiempo;  private int ultimoConteo;  public vibracion(Game game)  : base(game)  {  // TODO: Construct any child components here  }  /// <summary>  /// Allows the game component to perform any initialization it needs to before starting  /// to run. This is where it can query for any required services and load content.  /// </summary>  public override void Initialize()  {  // TODO: Add your initialization code here  base.Initialize();  }  /// <summary>  /// Allows the game component to update itself.  /// </summary>  /// <param name="gameTime">Provides a snapshot of timing values.</param>  public override void Update(GameTime gameTime)  {  if (tiempo > 0)  {  int pasado = System.Environment.TickCount - ultimoConteo;  if (pasado >= tiempo)  {  tiempo = 0;  GamePad.SetVibration(PlayerIndex.One, 0, 0);  }  }  base.Update(gameTime);  }  protected override void Dispose(bool disposing)  {  GamePad.SetVibration(PlayerIndex.One, 0, 0);  base.Dispose(disposing);  }  public void RumblePad(int Tiempo, float MotorIzquierdo, float MotorDerecho)  {  ultimoConteo = System.Environment.TickCount;  tiempo = Tiempo;  GamePad.SetVibration(PlayerIndex.One, MotorIzquierdo, MotorDerecho);  }  }  }
  • 25. Creamos el objeto que cuasa el efecto de vibracion //Objeto para el efecto private vibracion VivraPad; Y luego en el método Initialize() de la clase Game1 VivraPad = new vibracion(this); Components.Add(VivraPad); Y por ultimo para crear la vibración al momento de chocar se agrega la siguiente línea de código, donde verificamos la colisión VivraPad.RumblePad(500, 1.0f, 1.0f);
  • 26. Ahora ya se tiene el juego completo, si se quiere hacer una copia para que se ejecute en la Xbox, click derecho en el solution explorer y luego……