Transcript of Presentacion420
- 1. Agenda Describir el principio de los sprites en los juegos y
ver como se crean estos en un juego XNA. Aprender mas acerca del
ciclo de vida de los juegos en XNA. Aprender a como utilizar el XNA
Content Manager para cargar imgenes, cuando un juego comienza su
ejecucin. Descubrir como XNA permite crear operaciones que hagan un
mejor uso del Hardware, que den un mejor soporte a los juegos. Usar
el XNA para dibujar imgenes en la pantalla.
- 2. Qu es un sprite ? Un sprite es cualquier elemento grafico
dentro de un juego, que se requiere manipular y mostrar. Un
fantansma en el pac-man Un aliens en Space Invanders. Adems puede
ser algo mas grande. El fondo de la pantalla en un juego. Es
posible pensar en un sprite como un composicin entre una imagen y
una posicin en pantalla.
- 3. Imgenes en el XNA Una imagen plana es manipulada por el XNA
utilizando un tipo Texture2D. Se crean variables de este tipo para
representar las imgenes que el juego muestra. Esta variables forman
parte del mundo del juego, por lo que deben estar declaradas dentro
del juego. // Game World Texture2D jakeTexture;
- 4. Cargando el contenido del juego Cuando un juego comienza su
ejecucin, este puede cargar todos los contenidos necesarios. Esto
es algo que no puede ser ejecutado por los mtodos Draw o Update. El
XNA Provee el mtodo LoadContent, el cual es llamado cuando el juego
comienza. Este mtodo es llamado una vez al inicio del juego.
- 5. El rol del LoadContent El mtodo LoadContent es llamado para
colocar los valores dentro del mundo del juego. Es llamado solo una
vez, al inicio del juego, antes de los mtodos Updata y Draw
- 6. El mtodo LoadContent El mtodo LoadContent que se provee el
proyecto, debe crear un valor del tipo SpriteBatch. Contiene una
sentencia TODO para mostrar donde se debe de adicionar el cdigo
para cargar el contenido. protected override void LoadContent() {
// Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your
game content }
- 7. Carga de la textura La sentencia asigna jakeTexture el valor
retornado por el mtodo Load. Le decimos al mtodo Load que tipo de
datos entregar (una del tipo Texture2D) y el nombre del asset
(jake) protected override void LoadContent() { // Create a new
SpriteBatch SpriteBatch = new SpriteBatch(GraphicsDevice);
jakeTexture = this.Content.load("jake"); }
- 8. Carga de la textura El item de la izquierda de la asignacin
es siempre la variable siendo asignada. protected override void
LoadContent() { // Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } El destino de la asignacin
- 9. Carga de la textura El carcter = le dice a C# que vamos a
realizar una asignacin protected override void LoadContent() { //
Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } El operador igual
- 10. Carga de la textura La palabra this provee una referencia
al objeto del juego que esta corriendo en el mtodo LaodContent
protected override void LoadContent() { // Create a new SpriteBatch
SpriteBatch = new SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } Una referencia al actual objeto
- 11. Carga de la textura Cuando un juego se ejecuta, este tiene
su propio Content Manager, el cual provee mtodos que pueden ser
utilizados para manipular el contenido del juego. protected
override void LoadContent() { // Create a new SpriteBatch
SpriteBatch = new SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } El administrador de contenido para
este juego
- 12. Carga de la textura El mtodo Load es llamado para traer el
asset. No debemos preocuparnos por como se esto se lleva a cabo,
simplemente llamamos y recibimos el contenido protected override
void LoadContent() { // Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } Se llama el mtodo Load
- 13. Carga de la textura El Content Manager usa el mecanismo de
C# llamado generics para crear un mtodo que pueda cargar diferentes
tipos de recursos. protected override void LoadContent() { //
Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } El tipo de recurso a ser
recobrado
- 14. Carga de la textura El nombre del recurso es un valor
string de C# Se colocar un string en un programa C#, colocando un
texto entre los caracteres . protected override void LoadContent()
{ // Create a new SpriteBatch SpriteBatch = new
SpriteBatch(GraphicsDevice); jakeTexture =
this.Content.load("jake"); } Nombre del recurso a ser adicionado al
proyecto
- 15. Carga de la textura Cuando un juego ejecuta el mtodo
LoadContent, lo hace al principio. Primero se crea el SpriteBatch
para luego ejecutar la sentencia que carga las texturas que sern
administradas por el juego. Tener en cuenta que aun no se ha
dibujado nada. Ahora trataremos lo de hacerlo.
- 16. Nombres malos del asset y errores en tiempo de ejecucin. Si
un asset no puede ser encontrado, el programa se detendr. VS
mostrar la sentencia donde se produce el error. Esto es un error en
tiempo de ejecucin. El juego compila de manera correcta, pero
fallar en tiempo de ejecucin por que no se encuentra el
recurso.
- 17. Demo
- 18. Posicionando el sprite usando un rectangulo Un sprite esta
hecho de una textura y una posicin. XNA puede usar estas dos piezas
de informacin para dibujarlo en la pantalla. Para expresar la
posicin de un tem, XNA provee un tipo llamado Rectangle.
Necesitamos adicionar un valor de rectngulo, para que se pueda
dibujar jake en el juego. Esto es otro tem del mundo del
juego.
- 19. Adicionar un rectngulo al mundo del juego El mundo del
juego ahora tiene dos variables. Ambas describen el sprite jake,
pero cada una describe un aspecto diferente del sprite. Se les ha
dado identificadores sensibles que adems dejan claro el tipo de
datos que almacenan. Al compilador C# no le importa esto, pero a
los ingenieros del software si.
- 20. La pantalla del XNA Un juego XNA puede ejecutarse en
diferentes tamaos de pantalla. Una Computadora y un Xbox soportan
varios tamaos de pantallas. El Zune tiene solo un tamao de
pantalla.
- 21. La pantalla del XNA Cuando un nuevo programa XNA es creado
para la computadora, se muestra en una pantalla de 800 de ancho por
600 de alto. El programa puede cambiar el tipo de pantalla en el
que se muestra 800 pixels 600 pixels
- 22. Las coordenadas de la pantalla Se puede pensar como un rea
de pantalla como un grfico que tiene su origen en la esquina
superior izquierdo. La coordenada X da la distancia a travs de la
pantalla. La coordenada Y da la distancia hacia abajo. X Y
(0,0)
- 23. Posicin de jake Queremos dibujar la foto con una distancia
a travs de la pantalla de 30 pixeles y hacia debajo de 20 pixeles.
Esto hace que tengamos la coordenada X=30 y la coordenada Y=20 30
20 (0,0) (30,20)
- 24. El tamao Vamos a darle un tamao de 600 pixeles de ancho por
450 pixeles de alto. XNA puede escalar la imagen a cualquier
dimensin que se desee 600 450
- 25. Construyendo el rectngulo La palabra reservada new crea un
nuevo objeto. La construccin toma lugar cuando el programa se
ejecuta. La construccin es ejecutada por un mtodo que es suplido
por los valores del rectngulo. En este caso se dan como parmetros
la posicin y el tamao. jakeRect = new Rectangle(30, 20, 600,
450);
- 26. El mtodo Initialize El mejor lugar para configurar los
valores de jakeRect es dentro del mtodo Initialize. Es muy similar
al mtodo LoadContent. Es llamado por el XNA cuando el programa
comienza a ejecutarse. Podemos configurar jakeRect dentro del mtodo
LoadContent, pero como esto es una configuracin del juego y no esta
relacionada con el contenido, es mas sensato hacerlo dentro del
mtodo Initialize. Un nuevo proyecto de XNA contiene un mtodo
Initialize completamente vacio.
- 27. El mtodo Initialize completo Este cdigo configura jakeRect.
Explicaremos el significado de base.Initialize() luego. Ahora
tenemos una textura y posicin con los que podemos dibujar el sprite
en la pantalla. protected override void Initialize() { jakeRect =
new Rectangle(30, 20, 600, 450); base.Initialize(); }
- 28. Dibujando sprites en XNA con SpriteBatch XNA provee un tipo
para manejar el dibujado de sprites. Este tipo es llamado
SpriteBatch. El spriteBatch crea los lotes de sprite a ser
dibujados y enva las instrucciones apropiadas hacia el dispositivo
de graficas. Esto hace que el dibujado sea lo ejecutado de la
manera mas eficiente posible. El objeto SpriteBatch para un juego
es creado dentro del mtodo LoadContent.
- 29. Utilizando el mtodo Draw El cdigo siguiente dibuja en
pantalla la textura de jake protected override void Draw(GameTime
gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.begin(); spriteBatch.draw(jakeTexture, jakeRect,
Color.White); spriteBatch.end(); base.draw(gameTime); }
- 30. Limpiar el fondo La sentencia limpia la pantalla mediante
el color Cornflower. Esto se crea como parte de un nuevo proyecto
XNA protected override void Draw(GameTime gameTime) {
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.begin(); spriteBatch.draw(jakeTexture, jakeRect,
Color.White); spriteBatch.end(); base.draw(gameTime); }
- 31. Inicia el dibujado Esta sentencia le dice al SpriteBatch
que comienze el lote de comandos para dibujar protected override
void Draw(GameTime gameTime) {
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.begin(); spriteBatch.draw(jakeTexture, jakeRect,
Color.White); spriteBatch.end(); base.draw(gameTime); }
- 32. Dibujar el Sprite spriteBatch provee el mtodo Draw Tiene
como parmetros, la textura, el rectngulo y el color de luz para
iluminar la imagen protected override void Draw(GameTime gameTime)
{ graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.begin(); spriteBatch.draw(jakeTexture, jakeRect,
Color.White); spriteBatch.end(); base.draw(gameTime); }
- 33. Finalizar el Batch Cuando el mtodo End es llamado,
SpriteBatch colocar junto a todos los request de Draw y los enva al
dispositivo de pantalla protected override void Draw(GameTime
gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.begin(); spriteBatch.draw(jakeTexture, jakeRect,
Color.White); spriteBatch.end(); base.draw(gameTime); }
- 34. Demo Dibujar a jake
- 35. Resumen Un sprite es hecho de una textura conteniendo una
imagen y un rectngulo que describe la posicin del sprite en la
pantalla. El mtodo LoadContent es parte de un juego XNA que es
llamado para cargar el contenido. El tipo ContentManager provee el
mtodo Load el cual puede cargar el contenido dentro de un juego. EL
tipo Rectangle en XNA pude ser usado para describir un rectngulo en
la pantalla. El tipo SpriteBatch administra el dibujado.
- 36. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estan en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 37. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estan en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 38. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estn en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 39. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estn en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 40. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estn en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 41. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estn en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite
- 42. Verdadero o Falso La imagen a ser dibujada en un sprite es
mantenida dentro de los valores de Rectangle. El Content Manager
controla la posicin de un sprite que es dibujado en pantalla. Las
coordenadas de origen de la pantalla estn en la esquina superior
izquierda. El contenido debe ser cargado dentro del mtodo
Initialize. SpriteBatch ejecuta el dibujado en la pantalla. El
mtodo Draw indica el color del sprite