Sie sind auf Seite 1von 107

Resumen

El desarrollo de un videojuego es un proceso extenso. el cual abarca muchas reas, no solo la programacin. Se deben considerar gran cantidad de factores. Desde la arquitectura de hardware hasta compatibilidad de formatos y dispositivos. En el mercado actual de videojuegos son varias la empresas de desarrollo de videojuegos que dividen sus tareas en varios equipos. En esta tesis se investiga el uso de una herramienta diseada para facilitar el desarrollo de videojuegos. Esta herramienta es XNA Game Studio 3.1 creada por Microsoft. la cual entrega la posibilidad de desarrollar software para varias plataformas, entre estas tenemos PC, Xbox 360 y Zune. Adems se Investiga sobre como realizar integracin de fsica a un videojuego. con el n de hacer mas reales los proyectos de videojuegos. Se Abarcan varios aspectos y tecnicas utilizadas en el desarrollo de un videojuego como el uso de sprites, fuentes y texto, tecnicas 2D, musica, video, fsica etc...

ndice general
I. Introduccin
1.1. Objetivos 1.1.1. 1.1.2. 1.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivo general

1
3 3 3 3

Objetivos especcos

Descripcin del documento . . . . . . . . . . . . . . . . . . . . . . . .

II. Marco terico


2.1. XNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. 2.1.2. 2.1.3. 2.1.4. 2.2. 2.3. 2.4. Objetivos de XNA Framework XNA 2.1.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
5 6 6 7 8 9 11 12 12 12 13 14

Capas del framework . . . . . . . . . . . . . . . . . . . . . .

Caractersticas de XNA

Sistema de coordenadas 2D

Content Pipeline 2.3.1. 2.4.1. 2.4.2.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Requisitos para comenzar Diseo de un videojuego

Requisitos opcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . Partes de un videojuego

Elementos claves para el xito de un videojuego.

III.Desarrollo
3.1. Interfaz XNA 3.1.1. 3.1.2. 3.1.3. 3.1.4. 3.2. 3.3. 3.4. 3.5. 3.6. 3.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El explorador de soluciones Ventana Principal.

15
16 16 17 17 18 18 19 22 23 24 25

Lista de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listas de navegacin de clases y mtodos . . . . . . . . . . . . . . . . Entendiendo el cdigo . . . . . . . . . . . . . . . . . . . . . . . . . .

Clases principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Biblioteca de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capa Alpha (RGBA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creando un Proyecto en XNA . . . . . . . . . . . . . . . . . . . . . . . . . . Propiedades de ventana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ii

NDICE GENERAL

NDICE GENERAL

3.7. 3.8. 3.9.

Cargar Imagenes o Sprites Movimiento

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

26 32 36 39 47 47 53 54 63 64 67 67 67 74 74 74

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Rotacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.10. Texto y fuentes 3.11. SpriteSheet

3.11.1. Usar un SpriteSheet

3.12. Parallax Scroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12.1. Implementar Parallax Scroll 3.13. Game Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13.1. Crear un Game component . . . . . . . . . . . . . . . . . . . . . . . . 3.14. Msica y sonidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14.1. XACT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14.1.1. Utilizar XACT 3.15. Vdeo. 3.14.1.2. Mp3 y otros formatos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.15.1. Reproduccin de Vdeo en XNA . . . . . . . . . . . . . . . . . . . . .

IV.Fsica
4.1. 4.2. 4.3. 4.4. Fsica en un videojuego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vector2 4.3.1. 4.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MathHelper

77
78 78 79 80 91 91

Colisiones 2D

Fuerza Gravitacional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementacin de Gravedad.

V. Conclusiones y trabajos futuros


5.1. 5.2. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trabajos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95
96 97

A. Apndice
1.1. Algunos videojuegos creados con XNA. . . . . . . . . . . . . . . . . . . . . .

98
99

iii

ndice de guras
2.1. 2.2. 2.3. 2.4. 2.5. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9. Capas XNA Game Studio 3.1 Plano Cartesiano Ventana . . . . . . . . . . . . . . . . . . . . . . . . . . 5 7 10 11 13 16 17 17 18 19 20 21 21 22 24 25 26 27 28 29 29 30 30 31 32 33 34 35 35 36 37 Framework de XNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Partes de un videojuego

Explorador de soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lista de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ventana Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listas de navegacin Program.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Librerias en Game1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Constructor y metodo Initialize Metodo LoadContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodo Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.10. Nuevo proyecto

3.11. Windows Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12. Nave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13. Agregar carpeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14. Agregar Imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.15. Variables de imagenes 3.16. Cargar Imagenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.17. ContentRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18. Dibujar Imagenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19. Resultado dibujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.20. Variables de posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.21. Movimiento con posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22. Modicando la posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.23. Movimiento con variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.24. Modicando la posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.25. Moviendo Sprite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.26. Variables de posicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iv

NDICE DE FIGURAS

NDICE DE FIGURAS

3.27. Inicializar vectores

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37 38 38 39 40 41 42 43 44 45 46 46 47 48 48 49 49 50 51 51 52 52 53 54 55 55 56 56 57 58 59 60 60 61 61 62 63 65 66 68 68 69

3.28. Movimiento y rotacin 3.30. Resultado rotacin 3.32. Plantilla Sprite Font

3.29. Dibujando rotacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.31. Nuevo elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.33. Archivo SpriteFont XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.34. Error por fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.35. Caracteres soportados 3.36. Variables para fuentes 3.38. Resultado DrawString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.37. Metodo DrawString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.39. SpriteSheet Guybrush Threepwood

3.40. Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.41. Variables y constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.42. Metodo Load de spritesheet 3.43. Metodo Update frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.44. Metodo Draw de spritesheet . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.45. Game1 Spritesheet Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.46. Game1 Spritesheet Initialize, Load . . . . . . . . . . . . . . . . . . . . . . . 3.47. Game1 Spritesheet Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.48. Game1 Spritesheet Draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.49. Resultado SpriteSheet 3.50. Fondo cielo 3.52. Clase Fondos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.53. Clase MultiFondos

3.54. Fondos AdicionarFondo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.55. Fondos CompararProfundidades . . . . . . . . . . . . . . . . . . . . . . . . . 3.56. Fondos Mover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.57. Fondos Dibujar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.58. Fondos Dibujar (Continuacin)

3.59. Otros mtodos Mover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.60. Fondos SetPosicionFondo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.61. Fondos Actualizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.62. Variables e Instancia para Scroll Parallax . . . . . . . . . . . . . . . . . . . . 3.63. Fondos LoadContent 3.65. Crear GC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.64. Resultado Parallax Scroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.66. Game Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.67. Ubicacin XACT 3.68. XACT nuevo proyecto

3.69. Wave y Sound Banks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

NDICE DE FIGURAS

NDICE DE FIGURAS

3.70. Nuevos Banks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.71. XACT con archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.72. XACT Opciones de Audio 3.51. Capas con transparencia 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.73. Variables para XACT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

70 72 73 74 76 79 80 81 82 83 84 84 85 85 86 87 88 89 90 91 92 92 93 93 94 99 100 101

Circunferencia en Radianes . . . . . . . . . . . . . . . . . . . . . . . . . . . . Radianes y Grados BoundingBox Colisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Vector3 min y max

Variables BoundingBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inicialisacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cargando Cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Update cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.10. Update cajas (Continuacin) . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11. Draw cajas 4.12. Resultado BoundingBox Intersect . . . . . . . . . . . . . . . . . . . . . . . . 4.13. Resultado BoundingBox Contains . . . . . . . . . . . . . . . . . . . . . . . . 4.14. BoundingSphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.15. Complejidad de colisiones 4.16. Variables para gravedad 4.17. Initialize con gravedad 4.18. Update gravedad 4.19. Resultado Cada Libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.20. Trayectoria de un proyectil . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1. 1.2. 1.3. Pong y Space Invaders con XNA . . . . . . . . . . . . . . . . . . . . . . . . . Invasin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Juego CanonSlaught

vi

Captulo I Introduccin

CAPTULO I. INTRODUCCIN

El desarrollo de un videojuego es un proceso que ha ido evolucionando con el tiempo y mayormente con el cambio tecnolgico. Si bien el comienzo de los videojuegos fue motivado por curiosidad y el ocio, hoy en da el mundo de los videojuegos es un mercado tremendamente lucrativo. Las reas comprendidas en el desarrollo de un videojuego se ha incrementado debido a la mayor innovacin y crecimiento en la industria del software; tanto as, que su crecimiento supero en trmino de ventas a la industria del cine y la msica. Un ejemplo de claro de ello fue Call of Duty: Modern Warfare 2 , consiguiendo 410 millones de dlares en su primer da de salida. Los videojuegos de hoy en da son bastante complejos, con algoritmos y mtodos de desarrollo nicos; cuyo desarrollo requiere la interaccin de gran cantidad de profesionales de muy diversas reas. Prcticamente todas las ramas de las ciencias de la computacin tienen su aplicacin en videojuegos. Si bien el mercado de los videojuegos presenta un nivel de competencia y exigencia alto. Un buen videojuego es aquel que resulta entretenido y adictivo. El cual se puede lograr sin gastar millones.

1 Videojuego

desarrollado por Innity Ward. Disponible para PC; Xbox360 y PS3.


2

1.1. OBJETIVOS

CAPTULO I. INTRODUCCIN

1.1.

Objetivos

1.1.1. Objetivo general


Desarrollo de un videojuego Utilizando XNA Game Studio 3.1.

1.1.2. Objetivos especcos


Aprender sobre el desarrollo de un videojuego. Adquirir el conocimiento necesario para hacer un videojuego con XNA Game Studio. Aprender como integrar fsica a un videojuego. Comenzar el desarrollo de un videojuego.

1.1.3. Descripcin del documento


Capitulo I:
En este captulo se encuentra la Introduccin al tema, los objetivos Generales y especcos.

Capitulo II:
videojuego.

Expone el marco terico donde se detalla que es XNA y cuales son sus

principales caractersticas, adems algunos aspectos a considerar en el desarrollo de un

Capitulo III: Capitulo IV: Capitulo V:

Desarrollo de la tesis, en este captulo se explica como utilizar XNA

Game Studio 3.1. En este captulo se explica como es la integracin de fsica en XNA

Game Studio 3.1 Conclusiones Finales y trabajos Futuros.

Captulo II Marco terico

2.1. XNA

CAPTULO II. MARCO TERICO

2.1.

XNA

XNA no es un acrnimo, es decir no son siglas. XNA es una API (Interfaz de programacin de aplicaciones). Desarrollada por Microsoft para facilitar el desarrollo de videojuegos para las plataformas Xbox 360, Zune, Windows y Windows Phone 7, esta ultima solo disponible a contar de la versin 4.0 de XNA Game Studio. Tcnicamente XNA es un marco de trabajo (Framework) el cual esta basado en .NET Framework. Las diferentes capas de XNA como se puede apreciar en la imagen 2.1. De arriba hacia abajo, XNA Game Studio utiliza la funcionalidad de XNA Framework y este a su vez esta basado en .NET Framework. Al nal encontramos las plataformas a las que van destinadas las aplicaciones que se logren desarrollar con XNA Game Studio. en este caso y para uso de la tesis la versin 3.1

Figura 2.1: Capas XNA Game Studio 3.1

XNA es una plataforma de desarrollo de videojuegos sobre directx, la cual proporciona bastante funcionalidad sobre las APIs multimedia de Microsoft. Lo que no permite poder centrarnos en lo que queremos hacer con nuestro juego y despreocuparnos de como hacerlo.

2.1. XNA

CAPTULO II. MARCO TERICO

2.1.1. Objetivos de XNA


Durante el desarrollo de XNA se plantearon dos objetivos principales

Permitir el desarrollo para varias plataformas


Uno de los objetivos de XNA era el desarrollo de videojuegos que puedan correr sobre varias plataformas (PC, Xbox, Zune) de una forma sencilla. Que rpidamente despus de crear un juego para PC, se pudiera realizar su versin para Xbox 360. En algunos casos es necesario diferenciar sobre varias plataformas. pero la meta era tener un 95 % del comportamiento normalisado en un conjunto de APIs.

Simplicar el desarrollo de los juegos


El desarrollar un videojuego es un conjunto de tareas diciles y complejas, Incluso para los profesionales y mas aun para estudiantes o acionados que se vienen a integrar a este mundo. Adems, el tiempo requerido es bastante, mas aun si se hacen muchas pruebas de acierto y error para tan solo pintar algo en pantalla o reconocer algn dispositivo, y hacer que este mueva algo. Es por esto que uno de los objetivos principales de XNA Game Studio es hacer esto de manera sencilla. XNA permite comenzar a escribir nuestro juego, inmediatamente despus de haber creado el proyecto. No tendremos que preocuparnos por la deteccin de un mando, o como realizar una ventana etc... Estas tareas sern solucionadas por el framework de XNA. Otro problema habitual es el de integrar contenido multimedia a un juego y que este se ejecute armnicamente con este. El contenido puede ser imagenes, sonidos, efectos por mencionar algunos. Pues una caracterstica de XNA de nombre Content Pipeline permite aadir contenido a nuestro juego de una manera sencilla, tan solo con click derecho en nuestro proyecto y seleccionamos agregar, y as el Content Pipeline importa, compila y carga todo. Un aspecto interesante de XNA, es la serie de Starter kits que proporcionan. Estos kits son un juego completo y funcional que incluye el cdigo y sus contenidos para que sean estudiamos y modicados a gusto. Son una buena referencia al momento de desarrollar juegos con XNA

2.1.2. Framework XNA


XNA Game Studio permite a programadores o incluso acionados la creacin de videojuegos mediante el lenguaje C# para Windows, Xbox 360, Zune y Windows Phone 7. El que se mencione el lenguaje C# como el medio para desarrollar los juegos en XNA, no signica que sea el nico. tambin se puede utilizar el lenguaje Visual Bsic y C++ pero con mucho menos soporte y limitaciones respecto a las plataformas de destino. El Framework es un conjunto de libreras .NET sobre las cuales el desarrollador se apoyara al momento de la creacin del juego.

2.1. XNA

CAPTULO II. MARCO TERICO

2.1.2.1.

Capas del framework

Gracamente el framework de XNA se puede apreciar en la imagen 2.2, donde se destaca que el programador solo se preocuparia del cdigo y del contenido dejando lo dems a XNA. facilitando enormemente la tarea de desarrollar un videojuego. Podemos entender el framework en cuatro capas.

Figura 2.2: Framework de XNA

Plataforma
La plataforma es la capa mas baja. Esta compuesta por un conjunto de APIs que son la base de XNA. algunas de estas son Direct3D, XACT, Xinput, Xcontent

Ncleo del framework


El ncleo es la  primera capa de XNA y proporciona la funcionalidad que otras capas heredan. Aqu puedes encontrar distintas reas agrupadas por funcionalidad, Grcos, Audio, Datos Entrada, Matemticas y Almacenamiento.

2.1. XNA

CAPTULO II. MARCO TERICO

Framework extendido
La principal labor de esta capa es hacer del desarrollo de juegos algo fcil. Actualmente esta capa tiene dos componentes principales: el modelo de aplicacin y el Content Pipeline.

Juegos
Los juegos son la capa ms alta (incluso aunque estn al nal de esta lista!). Esta capa est formada por el cdigo del juego y su contenido.

2.1.3. Caractersticas de XNA Modelo de aplicacin


El propsito del modelo de aplicacin es el de abstraer al programador de la plataforma en la que se ejecutara el juego. Con esto se permite concentrar los esfuerzos en le juego mismo, evitando que nos preocupemos de pensar en como crear ventanas, manejar mensajes u otras tareas. las cuales sern todas proporcionadas por XNA. De la misma manera tambin se nos ofrece el GraphicsComponent que hace increblemente fcil la creacin y manejo del GraphicsDevice (Dispositivo Grco), el cual usaremos para renderizar. Aqu tambin es donde se proporciona el modelo de componentes, que nos permite incorporar GameComponents escritos por otros de manera inmediata en nuestro juego. Esta idea es genial para construir una biblioteca de componentes reutilizables.

Grcos
El API grco est basado en el de Direct3D. Empez siendo muy similar al de Managed DirectX (MDX) pero nalmente pas una serie de refactorizaciones y limpiado hacindolo incluso ms fcil y consistente con las guas de diseo de .NET. Un gran cambio de MDX que incluyeron fue la supresin de las funciones jas para el cauce grco a favor de un cauce grco programable a travs de shaders. Para aquellos que todava no saben escribir shaders XNA incorpora una clase bsica llamada BasicEect que podremos usarla para pintar rpidamente sin tener que programar nada extra. Una vez aprendamos a escribir nuestros propios shaders podremos sustituir esta clase bsica para incluir nuestros propios cheros.

Audio
El API de audio est construido sobre XACT (aunque XNA ya soporta reproduccin de archivos .wav .wma y .mp3) XACT ES la multiplataforma de audio de Microsoft para Windows y Xbox360. La idea detrs de XACT es similar a la de los shaders con Direct3D. La herramienta XACT crea

2.1. XNA

CAPTULO II. MARCO TERICO

 paquetes de efectos de sonido pudiendo congurar aspectos como el volumen, looping, mezclado de canales etc. Los desarrolladores luego cogen el paquete, lo cargan y en seguida pueden reproducir los archivos por su nombre, sin tener que inicializar buers, streaming de datos u otro tipo de inicializacin.

Dispositivos de entrada
El API para los dispositivos de entrada est construida sobre XInput, el API que dirige a los controles de la Xbox 360. Ofrece un modo inmediato que no requiere inicializacin. No hay que preocuparse sobre adquirir o liberar un dispositivo, establecer el modo compartido, etc. Lo nico que necesitamos es llamar a GetState sobre el tipo de controlador apropiado y ya est. Adems se proporciona un tipo llamado GamePad que representa a los mandos de Xbox360 y Windows, as como para el teclado y el ratn.

Almacenamiento
El API de almacenamiento proporciona la forma en la que podemos leer y escribir datos (como partidas grabadas, lista de mximas puntuaciones, etc.) de forma independiente a la plataforma donde se est ejecutando el juego. En Windows es bastante sencillo ya que tenemos clases de entrada y salida para manejar todo esto. En Xbox 360, necesitamos asociar un game state con un perl y un dispositivo de almacenamiento, como el disco duro o una unidad de memoria. Pero de nuevo todo esto se consigue de manera sencilla y transparente para el desarrollador, de forma que el mismo cdigo para Windows servir para un juego de Xbox 360.

Matemticas
XNA incluye los tipos ms usados para la programacin de juegos como Vectores de dos, tres y cuatro componentes, matrices, planos, rayos. Tambin se incluyen boundingBox, boundingSpheres y BoundingFrustrum. Estos volmenes incluyen mtodos para hacer test de intersecciones y poder detectar colisiones.

2.1.4. Sistema de coordenadas 2D


En XNA el sistema de coordenadas 2D (dos dimensiones) Esta compuesto por dos rectas al igual que un plano cartesiano. en el que una posicin en el plano es representada por dos valores. Estos valores corresponden a X e Y.

2.1. XNA

CAPTULO II. MARCO TERICO

Figura 2.3: Plano Cartesiano

Como se aprecia en la imagen 2.3 el eje x aumenta a medida que no alejamos del centro hacia la derecha y decrece a medida que nos alejamos del centro hacia la izquierda. Y para el eje vertical y ocurre lo mismo. aumenta a medida que nos alejamos hacia arriba y decrece a medida que bajamos. El sistema de coordenadas en XNA es similar. salvo que el origen o punto (0,0) se encuentra en el extremo superior izquierdo de la pantalla. Los valores en Y aumentan a medida que descendemos por la pantalla y en consecuencia los valores en X aumentan a medida que avanzamos horizontalmente por la pantalla. Gracamente quedara as 2.4

10

2.2. CONTENT PIPELINE

CAPTULO II. MARCO TERICO

Figura 2.4: Ventana

Es importante mencionar que la unidad en vez de ser metros o centmetros, en XNA o en el general de los videojuegos es el pixel. En consecuencia el dibujo estar limitado a la resolucin en la que se este trabajando. Sin embargo esto no implica que no podamos dibujar por ejemplo en una resolucin de 800*600 pixeles en el punto (900, 300). en denitiva podremos, pero este no sera visible para el jugador. El dibujar fuera del rea de trabajo o vista es una tcnica que se ha utilizado bastante en los juegos 2D. ya que la carga de imagenes se har fuera de la vista del jugador y as este no se vera sorprendido por la repentina aparicin de un sprite. Un aspecto a considerar al momento de dibujar Sprites 2D es que al igual que con el origen del plano en XNA. el dibujo de la textura considerara el extremo superior izquierdo como origen.

2.2.

Content Pipeline

En la actualidad los videojuegos incorporan gran cantidad de contenidos gracos y sonoros de gran calidad. Es posible apreciar gran contenido digital mezclando imagenes 2D de alta resolucin, modelos 3D, efectos y sonidos etc.. Si bien estos contenidos puedes desarrollarse paralelamente al videojuego y quedar a cargo de personas que no son necesariamente programadores por ejemplo un diseador. llega

11

2.3. REQUISITOS PARA COMENZAR

CAPTULO II. MARCO TERICO

el momento en que hay que incluir los contenidos al videojuego, y esta no es una tarea fcil desde el punto de vista de la programacin. En empresas desarrolladoras de videojuegos se crea un equipo que se encarga nicamente de esta tarea. ya que ella conlleva realizar exportaciones o creacin de programas de exportacin del contenido a un formato legible para el juego, realizar la codicacin para cargarlo. En resumen, hacer todo el trabajo necesario para reproducirlo correctamente en el juego. XNA nos libera de esa tarea con su propio Content Pipeline. que nos permite agregar a nuestro videojuego archivos de imagen, sonido, efectos, vdeos etc..

2.3.

Requisitos para comenzar


Microsoft XNA Game Studio 3.1 Microsoft .NET Framework 3.5 Microsoft Visual Studio 2008

2.3.1. Requisitos opcionales


Si bien muchos elementos que podramos agregar a nuestro videojuego los podemos encontrar en Internet. Estos no seran nicos, y seria muy probable encontrarlos repetidos ya en otros videojuegos. Por ello es recomendable si se desea hacer un videojuego con contenido propio. Contar con algn editor de imagenes avanzado. un editor de Audio y Vdeo entre otras aplicaciones. En esta tesis para la creacin de Sprites y edicin de imagenes se utilizo Adobe Photoshop CS, para la conversin de mp3 a wav se utilizo AudioConverter.

2.4.

Diseo de un videojuego

Segn el libro The Art of Game Design: A book of lenses escrito por Jesse Schell Un buen videojuego, es aquel que logra sacar lo mejor de todas las partes que hacen o componen un videojuego 2.5.

12

2.4. DISEO DE UN VIDEOJUEGO

CAPTULO II. MARCO TERICO

Figura 2.5: Partes de un videojuego

2.4.1. Partes de un videojuego


Esttica: Es la parte que mas interacta con el jugador, ya sea grcamente como sentimientos al jugarlo. Historia: Al mismo nivel que Mecnica, esta categora no se ve demasiado a la vista. Se trata de la historia que tiene nuestro juego. Mecnica: En otras palabras, el GamePlay las reglas y objetivos que tiene nuestro juego. Tecnologa: Es la parte funcional de nuestro juego, colisiones, animaciones o efectos seria cosas que abarcara "Tecnologa". Todas estas categoras que tiene nuestro videojuego trabajan en conjunto, por ejemplo la esttica(o resultado nal) puede nacer de todas las categoras. Entonces no hay una categora mas importante que otra. Se produce un efecto de sinergia al sumar estas partes, todas son importantes y todas deben ser tratadas con atencin. Si buscamos mejorar nuestro proyecto deberemos respondernos las siguientes preguntas: 1. Esta mi videojuego utilizando todas las categoras? 2. Puedo mejorar 1 o mas categoras? 3. Estn todas mis categoras trabajando en conjunto?

13

2.4. DISEO DE UN VIDEOJUEGO

CAPTULO II. MARCO TERICO

2.4.2. Elementos claves para el xito de un videojuego.


Si se logra adictividad en el usuario nal nuestro videojuego tendr xito. Son varios los elementos que pueden lograr esto, entre ellos estn: Tiempo: Este factor provoca la sensacin de reto en el videojugador. ejemplos comunes de ello pueden ser las premisas; Completa el nivel antes de un minuto, Tienes un minuto para.., etc.. Competencia: El poder comparar nuestros logros con el de los dems genera competencia. el utilizar puntajes hace que un vdeo jugador pase muchas horas tratando de auto superarse o superar a los dems. Repeticin: aunque la palabra pueda resultar una alusin a aburrimiento, si se logra equilibrar una buena idea con repeticin tendremos un videojuego adictivo. Un ejemplo claro es Tetris. Habilidad: Si bien al videojugador le gustan los retos, aparte del tiempo, podemos agregar dicultad a un videojuego creando niveles o etapas basadas en habilidades como reejos, resistencia o intuicin. Recompensa: Esta sin duda la gran motivacin de varios videojuegos. Al jugador le gusta desbloquear cosas, entienda desbloquear cosas como liberar contenido extra. un ejemplo de esto son, ropas alternativas para el protagonista del juego. niveles secretos etc.. Exploracin: Si bien una buena historia puede motivar al videojugador, talvez la linealidad le provoque aburrimiento. por lo que el poder explorar a gusto un nivel o mapa resulta satisfactorio y emocionante para e videojugador. se crea cierta idea de libertad.

14

Captulo III Desarrollo

3.1. INTERFAZ XNA

CAPTULO III. DESARROLLO

3.1.

Interfaz XNA

La interfaz sobre la que trabajaremos es la de Visual Studio ya que XNA es un framework. por lo que las teclas de acceso rpido (HotKeys) nos sern familiares. pro ejemplo para guardar Ctrl + g para ejecutar nuestra aplicacin o juego en este caso F5 para interrumpir la ejecucin Shift + F5. Un HotKeys interesante es el de depurar con la tecla F11 Ya que tras depurar dejara marcado en amarillo la siguiente linea a ejecutar. Las tres partes mas importantes de la interfaz y que que utilizaremos para la programacin de nuestro juego son el Explorador de soluciones la Lista de errores y la Ventana principal.

3.1.1. El explorador de soluciones


El explorador de soluciones o explorador de contenidos se mostrara en lado derecho de la pantalla. Este mostrara los elementos de nuestro proyecto. en un diagrama de carpeta similar a un rbol. en el que si una carpeta contiene elementos podremos visualizarlos de manera des plegable.

Figura 3.1: Explorador de soluciones

16

3.1. INTERFAZ XNA

CAPTULO III. DESARROLLO

3.1.2. Lista de errores


Esta se encuentra en la parte inferior de la pantalla. Aqu aparecern los mensajes de errores cuando depuremos o compilemos y ejecutemos nuestro videojuego. incluso mientras escribimos nuestro juego puede que nos muestre mensajes

Figura 3.2: Lista de errores

3.1.3. Ventana Principal.


El rea central es la parte donde se puede escribir cdigo. por lo que la consideraremos la mas importante.

Figura 3.3: Ventana Principal

17

3.2. CLASES PRINCIPALES

CAPTULO III. DESARROLLO

3.1.4. Listas de navegacin de clases y mtodos


Estas son dos listas des plegables que nos ayudaran a movernos entre clases y mtodos a medida que el proyecto cresca. En proyectos grandes la clase Game1 suele poseer mucho cdigo, por lo que la lista de navegacin es muy importante.

Figura 3.4: Listas de navegacin

3.2.

Clases principales

Al crear un proyecto se crearan estomticamente dos clases:

Program.cs Game1.cs

Esta clase inicializa nuestro juego, no es necesario modicarla para correr nues-

tro proyecto. 3.5 Esta es la clase base del juego. es la mas importante ya que en ella iran las lineas

mas importantes de cdigo de nuestro videojuego.

18

3.2. CLASES PRINCIPALES

CAPTULO III. DESARROLLO

3.2.1. Entendiendo el cdigo


Program.cs

Figura 3.5: Program.cs

19

3.2. CLASES PRINCIPALES

CAPTULO III. DESARROLLO

Game1.cs

Figura 3.6: Librerias en Game1

Primero encontramos los using 3.6 que son los encargados de importar lo necesario de .NET y XNA a nuestro proyecto.

20

3.2. CLASES PRINCIPALES

CAPTULO III. DESARROLLO

Figura 3.7: Constructor y metodo Initialize

Despus tenemos el mtodo Constructor 3.7, en este mtodo debemos colocar lo que querramos que se ejecute obligatoriamente, como la ubicacin del Content, la resolucin de pantalla etc.. Luego tenemos el mtodo Initialize 3.7 Colocaremos la lgica del videojuego, por ejemplo las posiciones de los elementos del proyecto.

Figura 3.8: Metodo LoadContent

En el mtodo LoadContent 3.8 cargamos el contenido de nuestro proyecto, especicando

21

3.3. BIBLIOTECA DE CLASES

CAPTULO III. DESARROLLO

las rutas de las imagenes, efectos etc..

Figura 3.9: Metodo Update

Por ultimo los metodos Update y Draw. El mtodo Update, se ejecuta constantemente y es donde actualizaremos el estado del videojuego, por ejemplo aqu programaremos el movimiento de los Sprites al pulsar el teclado. Y el mtodo Draw es el encargad de dibujar por pantalla los elementos del proyecto.

3.3.

Biblioteca de clases1

La coleccin de XNA Framework es una biblioteca de clases, interfaces y tipos de valores que se incluyen en XNA Game Studio. Esta biblioteca proporciona acceso a la funcionalidad de XNA Framework y est diseada para ser la base sobre la cual construir aplicaciones, componentes, y los controle con XNA Game Studio.

1 Traduccin

de http://msdn.microsoft.com
22

3.4. CAPA ALPHA (RGBA)

CAPTULO III. DESARROLLO

Microsoft.Xna.Framework

Satisface necesidades comunes de algunos juegos, tales como

temporizadores y bucles de juego.

Microsoft.Xna.Framework.Audio

Contiene APIs de bajo nivel que pueden cargar y ma-

nipular proyectos XACT. Estos son los que contienen archivos de audio.

Microsoft.Xna.Framework.Content
el Content Pipeline.

Contiene los componentes tiempo de ejecucin para

Microsoft.Xna.Framework.Design

Proporciona una manera unicada para conversin

de tipos de datos a otros tipos de datos.

Microsoft.Xna.Framework.GamerServices

Contiene clases que implementan los distin-

tos servicios relacionados con los jugadores. Estos servicios se comunican directamente con el jugador, los datos del jugador, o de otra manera reejan las opciones del jugador hace. los servicios de jugador incluyen dispositivo de entrada y las API de datos de perl.

Microsoft.Xna.Framework.Graphics

Contiene APIs de bajo nivel con mtodos que apro-

vechan las capacidades de aceleracin de hardware para mostrar objetos 3D.

Microsoft.Xna.Framework.Graphics.PackedVector
componentes que no son mltiplos de 8 bits.

Representa los tipos de datos con

Microsoft.Xna.Framework.Input Microsoft.Xna.Framework.Media Microsoft.Xna.Framework.Net

Contiene clases que reciben entradas desde el teclado,

ratn y dispositivos de Xbox 360. Contiene clases para enumerar y utilizar elementos

multimedia como lbumes, listas de reproduccin y fotos. Contiene clases que implementan soporte para el uso de

Xbox LIVE, multijugador, y creacin de redes para juegos.

Microsoft.Xna.Framework.Storage
de archivos.

Contiene clases que permiten la lectura y escritura

3.4.

Capa Alpha (RGBA)

XNA permite trabajar con transparencias en las texturas, es decir, con el canal alfa de un color RGBA (Red, green, blue, alpha). Existen 2 vas para conseguir que una textura tenga capa alfa. La primera trabajar con imagenes .png que ya contienen la capa alfa, incluso si creamos de cero una imagen .png el editor de imagenes nos preguntar si se desea crear como transparencia. El otro modo de conseguir una transparencia en una textura es a partir del magenta puro (255,0,255) el cual XNA automticamente reconoce como capa de transparencia de la textura.

23

3.5. CREANDO UN PROYECTO EN XNA

CAPTULO III. DESARROLLO

3.5.

Creando un Proyecto en XNA

Para trabajar con XNA lo primero que debemos hacer hacer, es correr Microsoft Visual Studio. Si lo ejecutamos por primera vez, seleccionar el lenguaje C# como el que se va a utilizar. Al instalar XNA Game Studio 3.1, por defecto en el men de inicio en la opcin todos los programas, dentro de la carpeta de Microsoft XNA Game Studio 3.1 habr un acceso directo a Visual Studio. Ulteriormente a la ejecucin de Visual Studio seleccionamos en archivo Nuevo Proyecto como se aprecia en la imagen 3.10

Figura 3.10: Nuevo proyecto

Inmediatamente se nos preguntara por el tipo de proyecto. seleccionamos dentro de visual C# que sea XNA Game Studio 3.1 y como plantilla elegimos Windows Game 3.1

24

3.6. PROPIEDADES DE VENTANA

CAPTULO III. DESARROLLO

Figura 3.11: Windows Game

Como se puede apreciar en la imagen 3.11dentro de las plantillas disponibles tambin se encuentran una para Xbox 360 y Zune que son las otras plataformas para las que podramos hacer nuestro juego. Tambin se pueden crear sus respectivas libreras que guardaran clases y el proyecto quedara como un DLL.y tambin aparece un Starter Kit que es una buena referencia si se quiere hacer un videojuego de plataformas. Por ultimo podremos modicar el nombre de nuestro proyecto y su ubicacin, tambin el nombre del juego que equivale a nombre de la solucin. Luego de aceptar ya esta todo listo para comenzar a programar un videojuego.

3.6.

Propiedades de ventana

Hay propiedades como la resolucin o titulo de la ventana que podemos modicar con unas pocas lineas de cdigo, y as aprovechar mejor las posibilidades de la pantalla y dar un toque personal al videojuego. Las propiedades referentes a la pantalla las realizamos en el constructor. Para iniciar la aplicacin a pantalla completa 3.6.

25

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

this

. graphics . IsFullScreen =

true ;

Permitir que el usuario modique con el mouse las dimensiones de la pantalla 3.6.

this

. Window . A l l o w U s e r R e s i z i n g =

true ;

Modicar la resolucin por defecto del juego 3.6.

this
3.6.

. graphics . PreferredBackBufferWidth = 1024;

this

. graphics . PreferredBackB

Y por ultimo para modicar el titulo de la ventana, agregamos dentro del mtodo Initialize

Window . T i t l e = " T e s i s " ;

3.7.

Cargar Imagenes o Sprites

El termino Sprite hace referencia a una imagen rasterizada o mapa de bits. que son muy utilizadas en los juegos de dos dimensiones. el protagonista de un videojuego puede estar representado por uno o mas sprites. un ejemplo de Sprite es esta nave 3.12que fue dibujada con Adobe Photoshop CS y la cual utilizaremos para explicar como colocar una imagen utilizando XNA.

Figura 3.12: Nave

Los formatos aceptados por XNA son: 1. - BMP 2. - JPG/JPEG 3. - PNG 4. - TGA 5. - DDS

26

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

Cualquier imagen, sonido, XML o incluso modelos 3D los incluiremos en nuestro proyecto a travs del explorador de soluciones. Para mantener un mayor control y orden sobre nuestro proyecto es recomendable, crear carpetas con nombres descriptivos. por ejemplo para los sprites una carpeta sprites, para la fuentes una carpeta fuente y as respectivamente. Esta carpetas se pueden crear apretando click derecho en Content(Carpeta de contenido) que se encuentra en el explorador de soluciones. 3.13

Figura 3.13: Agregar carpeta

Creada nuestra carpeta Sprites procedemos a agregar nuestra nave. Tambin con click derecho pero esta vez sobre la carpeta Sprites 3.14y elegimos en agregar elemento existente. Luego se nos preguntara la ubicacin de la imagen que queremos agregar y aceptamos. Veremos que inmediatamente debajo de la carpeta Sprites quedo nuestra imagen. Para hacer mas completo el ejemplo agregaremos otra imagen, que en este caso har de fondo, as parecer que nuestra nave esta en algn lugar.

27

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

Figura 3.14: Agregar Imagen

Luego de haber agregado las imagenes hacemos doble click sobre la clase principal Game1.cs. as en la parte central del entorno de trabajo se nos cargara el cdigo por defecto de esta clase, con esto nalizamos con el explorador de soluciones y procedemos a escribir cdigo. debajo de la clase Game1 y de los manejadores de trcos y sprites, colocaremos las variables correspondientes a la nave y el fondo como se aprecia en la siguiente imagen 3.15.

28

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

Figura 3.15: Variables de imagenes

Estas variables sern del tipo Texture2D que es una variable diseada para contener este tipo de archivos y poder manejarlos facilmente. Tambin podemos encontrar el tipo de variable Texture3D que es para modelos en tres dimensiones. Declaradas las variables ahora nos ubicaremos en el mtodo LoadContent 3.16 podemos utilizar el listado de mtodos para llegar facilmente. aqu es donde especicaremos la ubicacin de nuestras recin agregadas imagenes. as el videojuego las puede cargar al momento de ejecutar el juego.

Figura 3.16: Cargar Imagenes

La propiedad Content, es de nuestra clase, la obtiene cuando se Hereda la clase Game a la nuestra. Como su nombre lo dice, trabaja sobre nuestra carpeta Content. -La funcin Load,

29

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

se utiliza para cargar, dentro de las < > se coloca el tipo de objeto que vamos a cargar, como la nuestra es del tipo Texture2D, le ponemos Texture2D. -Dentro de los parntesis, seguido de unas comillas colocamos la ruta de nuestra imagen, hay dos cosas a tener en cuenta, primero que nosotros no debemos poner Content/nave.png, eso es por que arriba esta puesto Content.RootDirectory, 3.17 ah se le dice donde esta nuestro Content. Y segundo, no debemos poner la extensin de nuestra imagen, con solo poner el nombre alcanza, as tambin con lo que sea que estemos cargando.

Figura 3.17: ContentRoot Luego a travs del listado de mtodos seleccionamos Draw y aqu es donde comienza el dibujo. Es importante considerar el orden en que colocamos los sprites ya que estos se superpondran uno sobre otro. entonces si colocsemos el fondo sobre la nave esta ultima no seria visible. para comenzar el dibujo hay que inicialisar el spriteBatch quedara as: spriteBatch.Begin(); 3.18

Figura 3.18: Dibujar Imagenes

30

3.7. CARGAR IMAGENES O SPRITES

CAPTULO III. DESARROLLO

Usamos la propiedad Draw del spriteBatch para dibujar. Como primer parmetro, pide el nombre de la variable donde guardamos la textura. Como segundo parmetro colocamos la posicin donde dibujaremos. en la imagen vemos que el fondo tiene la posicin Vector2.Zero esto indica q dibuje en el origen. y la nave estar en la posicin X=100 e Y=300, el ultimo parmetro el color de colocar red veramos nuestra nave con un ltro rojo, white la muestra tal cual la habamos dibujado. Por ultimo Cerramos el spriteBatch, con spriteBatch.End(); ahora solo queda compilar y ejecutar con F5 y la aplicacin se vera como la imagen a continuacin. 3.19

Figura 3.19: Resultado dibujo

31

3.8. MOVIMIENTO

CAPTULO III. DESARROLLO

3.8.

Movimiento

Ya sabiendo colocar imagenes y mostrarlas por pantalla ha llegado el momento de poder moverlas en el espacio de juego. como nuestro juego se desenvuelve en dos dimenciones nos moveremos a travs del eje X e Y. de ser uno en 3 dimensiones serian en el eje X, Y, Z. Para manejar el movimiento crearemos justo debajo de nuestras variables gracas dos variables del tipo int que guardaran la posicin en X e Y. 3.20 Podemos tambin utilizar una sola variable del tipo Vector2. Utilizaremos las dos formas ya que como sabemos en la programacin hay muchas maneras de realizar lo mismo.

Figura 3.20: Variables de posicin La variable del tipo Vector2 de nombre inicio adquiere sus valores en el mtodo Initialize y la inicializamos as: 3.8 inicio = new Vector2 ( 0 , 0 ) ;

Donde el primer parmetro es la posicin en X y la segunda es la posicin en Y. tambin podemos inicializarla as: inicio = Vector2 . Zero ;

Que de igual forma hace referencia al origen. A continuacin controlaremos el movimiento de nuestro sprite a travs del teclado. y la clase que se encarga de ello es KeyboardState que captura cuando se presiona o no una tecla. Esta clase tiene 2 propiedades que son las mas comnmente usadas:

IsKeyUp

Detecta si la tecla ingresada como parmetro NO esta pulsada. Detecta si la tecla ingresada como parmetro esta siendo apretada.

IsKeyDown

En el mtodo Update la cual siempre se estar actualizando durante la ejecucin del juego, colocamos: KeyboardState k e y b o a r d = Keyboard . G e t S t a t e ( ) ;

32

3.8. MOVIMIENTO

CAPTULO III. DESARROLLO

Ahora lo que nos interesa es mover nuestro sprite y esto lo haremos a travs de sentencias if 3.21vericamos si se presionaron la teclas pensadas para mover el sprite (Arriba, abajo, izquierda, derecha) y modicamos las variables de posicin.

Figura 3.21: Movimiento con posicin

Se puede apreciar tambin en la imagen, que se asigno la accin salir si se presiona la tecla Escape y de igual forma si se presiona el botn back en el Gamepad del jugador 1. Ahora solo bastara modicar la posicin que le asignemos al sprite nave en el mtodo Draw como se ve a continuacin.

33

3.8. MOVIMIENTO

CAPTULO III. DESARROLLO

Figura 3.22: Modicando la posicin

Ahora al dibujar podremos mover la nave ya que pos_x y pos_y sern modicadas por las teclas Arriba, abajo, izquierda, derecha. tambin vemos que la posicin del sprite fondo ya no es Vector2.Zero. la hemos reemplazado por la variable inicio que tambin tiene los valores 0,0. por lo que el fondo se mantendr igual a cuando habamos cargado por primera vez. Ahora expondremos otra opcin, que es basar el movimiento en una sola variable del tipo Vector2. Para explicar esta otra alternativa utilizaremos el mismo cdigo que venamos utilizando para explicar el movimiento. la diferencia esta en que ya no utilizaremos las variables

pos_x ni pos_y .
Como ya habamos declarado una variable del tipo Vector2 que se llamaba  inicio , utilizaremos esta para aplicar movimiento a nuestro sprite. Modicamos el Update pero en vez de modicar dos variables distintas aqu solo indicamos que propiedad de la variable nos interesa modicar. (Ventaja de la POO ). Entonces si queremos modicar el eje Y especicaremos que queremos modicar solo inicio.Y y lo mismo con el eje X3.23

2 Programacin

Orientada a Objeto

34

3.8. MOVIMIENTO

CAPTULO III. DESARROLLO

Figura 3.23: Movimiento con variable Ahora en el mtodo Draw especicamos que la posicin de el sprite nave sera la variable inicio. 3.24 y modicamos tambin el parmetro de posicin del fondo ya que si lo dejsemos tambin con la variable inicio el fondo se movera al mismo tiempo que la nave. provocando un interesante efecto espejo.

Figura 3.24: Modicando la posicin La utilizacion de cualquiera de estos dos mtodos para mover un sprite entregara el mismo resultado. 3.25 Pero una ventaja interesante que tiene el tipo Vector2 es que posee

35

3.9. ROTACIN

CAPTULO III. DESARROLLO

varias funciones matemticas ya implementadas.

Figura 3.25: Moviendo Sprite

3.9.

Rotacin

En esta explicacion optaremos por utilizar variables del tipo Vector2, como habamos mencionado antes este tipo de variable posee implementadas varias funciones matemticas, las cuales utilizaremos para dar rotacin a nuestro sprite. Para mayor comodidad modicaremos el cdigo que habamos hecho para explicar el movimiento de una imagen o sprite. primero borraremos la variables pos_x y pos_y dejando solo la variable inicio la cual dejaremos para especicar donde dibujar el fondo, y agregaremos una variable del tipo Vector2 que utilizaremos para la posicin de la nave y tendr nombre posicion. crearemos tambin una variable del tipo oat la cual se encargara de la rotacion y por defecto llamaremos rotacion. 3.26

36

3.9. ROTACIN

CAPTULO III. DESARROLLO

Figura 3.26: Variables de posicin

Ahora inicialisamos nuestros vectores indicndoles su posicin y a la variable rotacin le asignamos un valor otante que representara los grados, para comenzar sera cero:

Figura 3.27: Inicializar vectores

Ahora para agregar rotacin adems de movimiento con las teclas, modicaremos el mtodo Update que habamos utilizado para mover la imagen. cambiamos la variable inicio por posicin. y adems agregamos un if, preguntando si se presiono la tecla espacio (Space). la cual modicara el ngulo de rotacin en 5 grados.

37

3.9. ROTACIN

CAPTULO III. DESARROLLO

Figura 3.28: Movimiento y rotacin Para hacer efectiva la rotacin del sprite, debemos agregar mas parmetros al spriteBatch como se aprecia en la imagen. 3.29

Figura 3.29: Dibujando rotacin Los parmetros mas importantes son despus del parmetro Color, donde se indican los

38

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

grados de rotacin, luego de este parmetro se indica el inicio de la rotacin que seria el centro de la nave. Y como resultado nal ahora podemos mover la nave por pantalla y si apretamos la tecla espacio la nave rotara. 3.30

Figura 3.30: Resultado rotacin

3.10.

Texto y fuentes

En cualquier videojuego es importante mostrar informacin por pantalla. puede ser instrucciones, puntajes, conversaciones, narracin o la historia misma del juego Para escribir en XNA es necesario agregar un nuevo elemento del tipo Sprite Font que sera la fuente que utilizaremos para escribir. esto lo hacemos con click derecho 3.31 en Content (explorador de soluciones) o para mayor orden y control crear una carpeta llamada fuentes. seleccionamos agregar Nuevo elemento luego nos preguntara que tipo de plantilla queremos agregar y elegimos Sprite Font. 3.32 (podemos modicar el nombre de la fuente a crear, pero no hay que modicar la extensin).

39

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.31: Nuevo elemento

40

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.32: Plantilla Sprite Font

Esto generara un archivo en lenguaje XML que inmediatamente se cargara en el centro de pantalla para su modicacin. 3.33 este archivo tiene informacin sobre el tipo de letra, tamao, espacio entre caracteres, estilo etc.. y el cual podemos modicar a gusto. siempre y cuando sepamos que estamos haciendo ya que es muy probable que la lista de errores nos indique un error y es poco probable que pensemos en las fuentes aunque si leemos detalladamente se menciona Spritefont. Tambin es importante considerar la fuente de letra que se ocupe ya que esta depende exclusivamente de las que posea el pc donde se ejecute la aplicacin.

41

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.33: Archivo SpriteFont XML

Un error comn y no muy fcil de detectar el origen es no se control ArgumentExeption

42

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.34: Error por fuente

Si leemos detalladamente se menciona que un carcter no es soportado por el SpriteFont. Para solucionar este error abrimos nuestro archivo XML, y nos dirigimos al nal de este. Ah modicaremos el numero dentro de las etiquetas <End></End> que por defecto tiene el valor 126 y lo dejamos en 260. 3.35 si leemos los comentarios sobre CharacterRegions vemos que se menciona la tabla de caracteres ASCII. ah se explica que dejando el valor en 126 se cubren los caracteres del latn bsico, por ello es que aumentamos el valor a 260.

43

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.35: Caracteres soportados

Para cargar nuestros Spritefonts por pantalla(escribir en pantalla) primero creamos una variable por cada fuente que hayamos creado. y las declaramos en la clase principal como todas las variables que ya hemos utilizado para el dibujo y movimiento de un sprite. agregamos las variables de las fuentes a nuestro cdigo y quedara as.

44

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.36: Variables para fuentes

Al igual que con las imagenes debemos cargar la fuente e indicarle la ruta en que se encuentra. En LoadContent escribimos: f u e n t e 1 = C o n t e n t . Load<S p r i t e F o n t >(" F u e n t e s / f u e n t e 1 " ) ; f u e n t e 2 = C o n t e n t . Load<S p r i t e F o n t >(" F u e n t e s / f u e n t e 2 " ) ; Recordemos que no es necesario escribir la extensin del archivo gracias a Content.RootDirectory 3.17. Ahora solo queda dibujar. y al igual que si fuera un sprite la fuente la dibujaremos en en el mtodo Draw() la diferencia radica en que en vez de utilizar la mtodo Draw del spriteBatch usaremos el mtodo DrawString el cual nos permite ingresar una cadena por parmetro. podemos concatenar tambin una variable con el smbolo + seguido de la cadena entre . Al igual que si fuera un sprite tambin le indicamos la posicin donde queremos que escriba. vemos que a un vector podemos aplicar el operador /, tambin podemos utilizar el operador

* pero no as el + ni el -.

45

3.10. TEXTO Y FUENTES

CAPTULO III. DESARROLLO

Figura 3.37: Metodo DrawString

El resultado nal seria: 3.38

Figura 3.38: Resultado DrawString

46

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

3.11.

SpriteSheet

Otra interesante tcnica utilizada en los juegos 2D es el uso de sprite sheet (Hoja de duendecillos). Como mencionamos antes en 3.7 se usan sprites para representar algn objeto o personaje en un videojuego. pues lo que hace la hoja de duendecillos es contener todos los frames de una animacin de personaje u objeto en un mismo archivo. y en base a clculos que implican el largo y ancho del fotograma se puede reproducir la animacin en la aplicacin.

3.11.1. Usar un SpriteSheet


Para explicar como utilizar un spritesheet en XNA debemos contar primero con alguno. Son fciles de encontrar en internet, y es probable encontrar spritesheet de juegos conocidos ya que los desarrolladores de videojuegos ya antiguos, han liberado varios. para este ejemplo utilizaremos un spritesheet que contiene el caminar de Guybrush Threepwood 3.39 famoso personaje de la saga Monkey Island.

Figura 3.39: SpriteSheet Guybrush Threepwood

La idea bsica de una animacin es mostrar frames en un determinado tiempo. Como podemos apreciar en el spritesheet 3.39 este posee doce dibujos de Guybrush las cuales pertenecen a una pose especica, las cuales mostradas en orden produciran el efecto de movimiento y que nuestro personaje camina. entonces lo que debemos indicarle a XNA es que frame mostrar, cuando cambiar el frame y cual es el siguiente frame.

47

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

Figura 3.40: Frames En la imagen 3.40 se aprecia mejor el como estn los frames en la hoja y cual seria el orden del ciclo para hacer la animacin. Para tratar los spritesheet es recomendable crear una clase nueva en el proyecto. la llamaremos TexturaAnimada esta clase sera la encargada de especicar que frame dibujar y cuales son sus coordenadas dentro del spritesheet. Variables y el constructor 3.41

Figura 3.41: Variables y constructor

48

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

En el constructor encontramos:

Position

Almacenara la posicin de donde dibujar el sprite o frame en este caso. Almacena el numero de frames que contiene el spritesheet. Calcula el tiempo que sera mostrado cada frame.

framecount

timePerFrame frame

Indica el frame actual, colocar cero har que la animacin comience por el primer

frame.

totalElapsed

Tiempo transcurrido.

Habr un mtodo Load en la clase, el cual recibe el content desde la clase Game1 y el nombre de la imagen para poder cargarla.

Figura 3.42: Metodo Load de spritesheet Se creara un mtodo UpdateFrame 3.43 el cual recibe recibe el tiempo que ha pasado desde la ltima vez que fue llamado y comprueba si ya se ha sobrepasado el tiempo de un frame para cambiarlo al siguiente.

Figura 3.43: Metodo Update frame Y por ultimo se creara un mtodo llamado DrawFrame. Este servir para localizar el frame a dibujar dentro del spritesheet, para ello se divide el ancho del sprite sheet entre el

49

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

numero de frames para saber cuanto es el ancho de cada uno. Y el rectngulo sourcerect se encarga de seleccionar el frame a pintar. Una vez tenemos todo, lo pintamos por pantalla con el mtodo Draw. En la imagen 3.44 podemos apreciar que el mtodo DrawFrame aparece dos veces, el primero es el que dibuja realmente, el segundo prepara el dibujo que es el que realiza las tareas mencionadas anteriormente como localizar el frame y calcular su ancho.

Figura 3.44: Metodo Draw de spritesheet

En la clase Game1.cs l que se hace es denir las constantes de nmero de frames y de frames por segundo, creamos el objeto de la clase TexturaAnimada y la iniciamos. Cargar la textura en el Load(), actualizar el frame pasndole port parmetro el tiempo transcurrido y dibujar el frame actual, todo eso manejado por la clase auxiliar de nombre TexturaAnimada.

50

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

Figura 3.45: Game1 Spritesheet Variables

Figura 3.46: Game1 Spritesheet Initialize, Load

51

3.11. SPRITESHEET

CAPTULO III. DESARROLLO

Figura 3.47: Game1 Spritesheet Update

Figura 3.48: Game1 Spritesheet Draw

Y como resultado de todo esto podremos ver a Guybrush Caminando campante por la playa.

52

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.49: Resultado SpriteSheet

3.12.

Parallax Scroll

Parallax Scroll o Scrolling Parallax es una tcnica bastante usada en los juegos 2D. Si bien hemos notado Scroll horizontal en Super Mario World o Scroll vertical en Aero Fighters ambos para la plataforma SNES

Scroll Parallax es el nombre concreto de la tcnica. Bsicamente

3 Super

Nintendo consola de videojuegos


53

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

esta tcnica lo que hace es mover varias capas superpuestas a distintas velocidades. simulando movimiento y profundidad. Una aplicacin tpica es el de mover un fondo de cielo lentamente, luego sobre este algunas montaas un poco mas rpido, y sobre este un suelo de tierra mas rpido aun. entonces se produce el efecto de que se estuviera avanzando en el escenario.

3.12.1. Implementar Parallax Scroll


Para lograr el efecto de profundidad se deben crear algunas capas con transparencias y dejar un fondo que cubra toda la pantalla. el fondo puede ser el de un cielo con nubes 3.50, y los fondos con transparencia las montaas y el terreno o suelo 3.51.

Figura 3.50: Fondo cielo La imagenes con transparencias 3.51 no se pueden apreciar del todo bien ya que el editor Lyx no soporta transparencias. Para manejar las capas se creara una nueva Clase en el proyecto, la que llamaremos Fondos. En Fondos.cs denimos 3.52.

54

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.52: Clase Fondos En la clase Fondos 3.52 Esta la denicin de una textura o capa y atributos de esta como posicin, profundidad, velocidad, direccin, tamao y color con que se dibujara. Ahora para poder manejar mas de un fondo o capa se creara dentro de Fonds.cs una nueva clase de nombre MultiFondos 3.53.

Figura 3.53: Clase MultiFondos La clase MultiFondos, va a ser la encargada de posicionar y mover los fondos o capas. En el constructor se recibe un objeto del tipo GraphicsDeviceManager, para posteriormente dibujar las capas. La clase posee dos variables del tipo Boolean: de nombres Moviendose y moverHorizontal, las cuales indicaran si una capa o fondo se esta moviendo, tambin hay una lista genrica, para ir guardando los fondos.

55

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

El primer mtodo a crear es el de AdicionarFondo 3.54.

Figura 3.54: Fondos AdicionarFondo Este mtodo recibe los parmetros bsicos para inicializar la clase Fondo, luego se adiciona la capa a la lista. El segundo mtodo es el de CompararProfundidades

Figura 3.55: Fondos CompararProfundidades CompararProfundidades sirve para ordenar los fondos desde el ms lejano al mas cercano, este mtodo recibe dos fondos y compara su propiedad profundidad.

56

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Uno de los mtodos ms importantes es el de Mover 3.56.

Figura 3.56: Fondos Mover

El mtodo Mover(), es uno de los ms importantes, debido a que este mtodo toma cada fondo de la lista, y verica si el estado de la propiedad movindose es true, luego se verica la propiedad moverHorizontal, y si esta es true se mueve el fondo en el eje de las X, dependiendo de la velocidad que hayamos inicializado y en la direccin especica, si es -1 se mover de derecha a izquierda o de abajo hacia arriba, Si se encuentra en false moverHorizontal se procede a mover Verticalmente. Mtodo Dibujar 3.57.

57

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.57: Fondos Dibujar

58

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.58: Fondos Dibujar (Continuacin)

El mtodo Dibujar(), ordena los fondos, y luego utiliza la clase SpriteBatch para dibujar los fondos, de acuerdo a si se va a dibujar Horizontalmente o Verticalmente, y adems verica los limites, para cuando el fondo se haya pasado del lmite (salir de la pantalla) entonces volver a empezar a dibujar, hace un ciclo de la misma imagen. Los otros mtodos 3.59son tiles para congurar el movimiento de los fondos, y detener la animacin.

59

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.59: Otros mtodos Mover

Figura 3.60: Fondos SetPosicionFondo

Por ultimo el mtodo Actualizar hace lo mismo que el mtodo Mover, pero recibe como parmetro la velocidad del juego (GameTime), esta variable cambia dependiendo de la potencia del computador.

60

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.61: Fondos Actualizar

Para usar la tcnica Scroll Parallax en nuestra clase principal Game1. Primero creamos una instancia de la clase Fondos. y creamos variables del tipo Texture2D para nuestras capas 3.62.

Figura 3.62: Variables e Instancia para Scroll Parallax

En el mtodo Initialize agregamos: fondo =

new

MultiFondos ( g r a p h i c s ) ;

En LoadContent indicamos la ubicacin de los fondos y agregamos estos a la instancia de la clase Fondos 3.63.

61

3.12. PARALLAX SCROLL

CAPTULO III. DESARROLLO

Figura 3.63: Fondos LoadContent

En el mtodo Update agregamos 3.12.1. f o n d o . Mover ( 0 . 5 f ) ; Y por ultimo el dibujo en el mtodo Draw 3.12.1. fondo . Dibujar ( ) ; El resultado de todo sera 3.64:

62

3.13. GAME COMPONENT

CAPTULO III. DESARROLLO

Figura 3.64: Resultado Parallax Scroll

3.13.

Game Component

Game Component es una abstraccin lgica de principales funcionalidades de nuestro juego. su ventaja es la de poder dividir nuestro juego en componentes lgicos de alto nivel. Esto porque XNA se diseo para modularisarse lo mas posible. Con esto se obtiene orden en el cdigo y reusabilidad de cdigo. que es uno de los principales problemas en ingeniera de software. El Game Component nace con la idea de poder tener piezas intercambiables (Componentes de juego) de un juego a otro. As el programador solo deber cambiar unas pocas lineas de cdigo para utilizar un componente. Un ejemplo y justicacin del uso de game component seria. Acabamos de terminar un juego y queremos realizar otro deberemos reescribir todo nuevamente?. El nuevo juego utilizara un men, si ya hice un antes porque no ocuparlo nuevamente? es as como el men podramos haberlo denido como game component desde un principio. as en el nuevo juego bastara con unas pocas lineas para integrarlo y ya sabramos que funciona. porque ya lo habramos provado antes. En internet, en comunidades de XNA es posible encontrar varios componentes, desde mens, hasta indicadores de puntaje u energa.

63

3.13. GAME COMPONENT

CAPTULO III. DESARROLLO

Cuando usar game component?


No todo puede ser un game component. En los videojuegos hay varias cosas que son muy especicas y hacen nicos a estos. estas no se pueden abstraer a un mtodo genrico para cualquier clase de juego y por ello no todo puede ser un GameComponents. Una norma general que se debe considerar al momento de crear un gamecomponent es  si vas a poder

reutilizarlo despus, cralo como un game component, si no, no te tomes la molestia .

3.13.1. Crear un Game component


Existen dos tipos de game components, aquellos que slo necesitan actualizar cosas pero no pintar nada por pantalla (es decir, tendrn el mtodo Update pero no el mtodo Draw) y aquellos que si necesitarn pintar por pantalla. La diferencia entre ambos es que uno hereda de la clase GameComponent y el otro de la clase DrawableGameComponent. Veamos un ejemplo 3.65: Para crear un game component hacemos click derecho (con un proyecto abierto) en el nombre de nuestra solucin y elegimos agregar nuevo elemento:

64

3.13. GAME COMPONENT

CAPTULO III. DESARROLLO

Figura 3.65: Crear GC

Procedemos a seleccionar Game Component3.66

65

3.13. GAME COMPONENT

CAPTULO III. DESARROLLO

Figura 3.66: Game Component

Con esto se creara una nueva clase: 3.13.1

public c l a s s

GameComponent1

M i c r o s o f t . Xna . Framework . GameComponent

Por defecto tenemos un game component que no dibuja nada por pantalla, si queremos que tenga el mtodo Draw tendremos que indicar que herede de DrawableGameComponent y no de GameComponent, adems habr que aadir el mtodo Draw: 3.13.1

public
{

override

void

Draw ( GameTime gameTime )

b a s e . Draw ( gameTime ) ; } Ahora con el componente creado basta con crear una instancia de esta clase en la clase principal del juego y aadirlo a la lista de componentes de XNA 3.13.1 GameComponent1 miComponente = Components . Add ( miComponente ) ; Un buen uso de GameComponent es para la creacin de mens, Indicadores de puntaje, energa, vitalidad etc...

new

GameComponent (

this

);

66

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

3.14.

Msica y sonidos

Porque un videojuego no solo es algo visual, tambin es muy importante el aspecto sonoro. Grandes juegos poseen tambin grandes bandas sonoras que quedan en el recuerdo de los jugadores.

3.14.1. XACT
XACT (Microsoft Cross-Platform Audio Creation Tool) es la herramienta que entrega Microsoft para el manejo de sonidos y msica en XNA. Esta herramienta posee interfaz grca que facilita bastante su uso. se puede encontrar en sus versiones 2.0 y 3.0 las cuales no tienen muchas diferencias. Si bien la versin 3.0 tiene algunas mejoras, no hay cambios sustanciales por lo que el salto de XACT 2.0 a 3.0 no presentara dicultades. Estas herramientas se encuentran dentro de la carpeta tools en Microsoft XNA Game Studio 3.1 3.67.

3.14.1.1.

Utilizar XACT

Al contrario que con el resto de recursos que se utilizan en un juego, como imagenes, efectos etc.. el sonido no debe (aunque se puede) incluir en el Content ya que deberamos crear un pipeline que lo gestionara. Por esta razn no se aade el sonido al content. Esa es la tarea del proyecto o lista XACT. Primero debemos tener una carpeta en nuestro proyecto XNA destinada para el audio. a la cual accederemos de forma manual. entiendase manual a que deberemos acceder a ella por carpetas y no por la interfaz del explorador de soluciones. y es en esta carpeta donde almacenaremos los archivos de audio. Antes de ejecutar XACT 3.0 debemos abrir primero XACT Auditioning Utility 3.67 el cual nos permitir escuchar simultaneamente los archivos mientras creamos o editamos nuestro proyecto XACT. Al ejecutarlo aparecer una ventana de la consola de Windows, la que no deberemos cerrar hasta culminar nuestro proyecto. Si solo vamos a agregar los archivos al proyecto no es necesario abrir Auditioning Utility. Al comienzo de esta explicacin se menciono que se debera haber creado una carpeta para el audio la cual ya debera contener los archivos a utilizar . Pues al crear el proyecto nuevo en XACT es en esta carpeta en donde lo debemos guardar.

67

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

Figura 3.67: Ubicacin XACT

Ejecutamos XACT y en archivo seleccionamos nuevo proyecto 3.68

Figura 3.68: XACT nuevo proyecto

Luego en la parte izquierda de la pantalla 3.69 debemos agregar nuevos Wave Banks y Sound Banks (A los nuevos Banks se les puede cambiar el nombre). esto lo hacemos con click derecho sobre Wave Banks y Sound Banks. Ahora a a la derecha se cargaran dos ventanas 3.70 que servirn para agregar los archivos .wav .aif y .ai y crear listas de reproduccin. estas ventanas aparecern superpuestas entre si, para mejorar la visin de estas, en la opcin Window (parte superior) hacemos click en

Tile horizontally as se ocupara el espacio libre.

68

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

Figura 3.69: Wave y Sound Banks

69

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

Figura 3.70: Nuevos Banks Para agregar los archivos de audio apretamos click derecho dentro del rea Wave Bank 3.70 y seleccionamos todos los archivos de audio que utilizaremos en nuestro juego. Porque agregar todos lo archivos? la respuesta es que al tener mas de una lista XACT en el proyecto es muy probable que hayan conictos entre ellas. Si se logro agregar los archivos estos aparecern dentro de Wave Banks. lo que debemos hacer a continuacin es arrastrar todos estos archivos a la ventana de Sound Bank donde dice Sound Name3.71 y por ultimo arrastrar estos mismos archivos de Sound Bank SoundName a Cue name 3.71. as podremos

70

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

seleccionar individualmente cada tema en nuestro proyecto. En Cue Name con click derecho podemos agregar una nueva lista de reproduccin que puede contener varios temas de Sound Name. Tan solo creando la lista y arrastrando los temas a esta lista. en la imagen 3.71 se puede apreciar que los temas rockam01 y rockman02 estn en la lista msica. y que cada uno tiene un 50 % de probabilidad de reproduccin. esto implica que cuando reproduzca la lista msica en el juego puede sonar primero cualquiera de las dos canciones. estas probabilidades pueden modicarse en el mismo XACT como tambin dejar un orden establecido de reproduccin. Las posibilidades que nos entrega esta herramienta son varias 3.72 entre las mas destacadas se encuentra:

Volume Pich

modicar el volumen.

cambiar el tono. Modicar la prioridad de las canciones para su reproduccin. Variar el tono Conseguir variaciones de tono.

Priority

VolVariation

PichVariation) 360Pan Looping

Dirigir el sonido si se cuenta equipo de sonido 5.1 Hacer que una cancin o sonido se repita una cantidad de veces indenidamente.

71

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

Figura 3.71: XACT con archivos

72

3.14. MSICA Y SONIDOS

CAPTULO III. DESARROLLO

Figura 3.72: XACT Opciones de Audio

Habiendo realizado lo anterior el proyecto se encuentra listo para ser aadido a nuestro proyecto XNA. El archivo que genero XACT y que guardamos en la carpeta de audio, es el que debemos agregar al proyecto XNA a travs del Content en el explorador de soluciones. Este sera el encargado de controlar los recursos de audio. Ahora tan solo basta declarar las variables necesarias. // v a r i a b l e s AudioEngine SoundBank de audio

engine ;

soundBank ;

WaveBank waveBank ; En el mtodo Initialize, como se puede apreciar en la imagen 3.73 al inicializar las variables ahora se les debe especicar donde estn las carpetas. ya que de esta forma liberamos del recurso audio al Content pipeline. Para reproducir un tema, sonido o lista bastara poner su nombre como parmetro en el mtodo PlayCue().

73

3.15. VDEO.

CAPTULO III. DESARROLLO

Figura 3.73: Variables para XACT

3.14.1.2.

Mp3 y otros formatos

Gracias XNA 3.1 y a la librera Microsoft.Xna.Framework.Media es posible reproducir mas formatos de audio aparte de .wav, se agrego .wmw y .mp3.

3.15.

Vdeo.

La reproduccin de un vdeo es un elemento bastante atractivo en un videojuego, las grandes empresas desarrolladoras de juegos ponen bastante nfasis en la presentacin de un videojuego. ya que esta puede inuir en el usuario en la decisin de adquirir o no el videojuego.

3.15.1. Reproduccin de Vdeo en XNA


De XNA Game Studio 3.1 en adelante se implemento la posibilidad de reproducir vdeo. El formato que soporta XNA es solo WMV. quienes permiten la reproduccin de vdeo son:

Video

Esta clase permite cargar el contenido de nuestro vdeo. tiene propiedades como

duracin, frames por segundo, alto, ancho, tipo de sonido, etc.

VideoPlayer

Esta instancia de la clase Video nos va a permitir ejecutar, parar, pausar,

obtener una textura especica, etc. Para trabajar con vdeo primero se deben declarar variables del tipo Video y VideoPlayer 3.15.1. Video video ; reproductor ;

VideoPlayer

En el mtodo LoadContent colocamos la ubicacin del vdeo. y cargamos el archivo 3.15.1. v i d e o = C o n t e n t . Load<V i d e o >(" t e s t " ) ; r e p r o d u c t o r . Play ( v i d e o ) ;

74

3.15. VDEO.

CAPTULO III. DESARROLLO

En el mtodo Update podemos podemos modicar el estado del vdeo 3.15.1. if { r e p r o d u c t o r . Play ( v i d e o ) ; } if { r e p r o d u c t o r . Pause ( ) ; } Y por ultimo para colocar el vdeo en pantalla lo ubicamos igual que como dibujabamos texturas, para que obtengamos una textura se utiliza el mtodo GetTexture() 3.15.1. s p r i t e B a t c h . Begin ( ) ; if || { s p r i t e B a t c h . Draw ( r e p r o d u c t o r . G e t T e x t u r e ( ) , new Rectangle (0 , 30 , v i d e o . Width , video . Height ) , C o l o r . White ) ; } s p r i t e B a t c h . End ( ) ; ( r e p r o d u c t o r . S t a t e == M e d i a S t a t e . P l a y i n g r e p r o d u c t o r . S t a t e == M e d i a S t a t e . P a us e d ) ( Keyboard . G e t S t a t e ( ) . IsKeyDown ( Keys . S ) ) ( Keyboard . G e t S t a t e ( ) . IsKeyDown ( Keys . P ) )

75

3.15. VDEO.

CAPTULO III. DESARROLLO

Figura 3.51: Capas con transparencia

76

Captulo IV Fsica

4.1. FSICA EN UN VIDEOJUEGO

CAPTULO IV. FSICA

4.1.

Fsica en un videojuego

Un videojuego como cualquier sistema informtico busca representar una realidad. y para ello las matemticas y la fsica son herramientas esenciales. Incluir Fsica a un videojuego hace que el jugarlo sea toda una experiencia. Grandes ttulos de videojuegos basan mucho su xito a su capacidad de representar el mundo real. Dentro de los videojuegos hay una categora que es la de simulacin donde se priorisa la realidad. Un simulador de carreras en el que el vehculo al chocar contra otro no tenga ningn efecto nos dejara con un sabor amargo tras jugarlo. lo mismo con un simulador de ftbol. si el jugador pateara la pelota y esta nunca cayera al csped. No siempre tendremos como objetivo hacer una copia exacta de la realidad al crear un videojuego. muchos juegos se han hecho famosos no por lo real, si no todo lo contrario. Juegos donde podremos saltar enormes distancias, volar, correr a velocidades inhumanas etc.. Si bien no buscamos hacer una copia exacta de la realidad tendremos en algn momento que tomar en cuenta ngulos si queremos disparar de un caon. tendremos que considerar peso y volumen si es que hay colisiones etc.. Por ello XNA nos entrega bibliotecas que nos facilitaran el calculo y nos ayudaran a dar fsica a nuestro proyecto.

4.2.

Vector2

Un vector es un punto en nuestro plano cartesiano. Anteriormente ya hemos hecho mencin de utilizar la clase Vector2 para manejar las posiciones. ya que esta clase consta de varios mtodos matemticos implementados y optimisados. algunos de estos mtodos son: public static float Distance ( Vector2 value1 , Vector2 value2 )

Que entrega la distancia entre dos vectores otro sera. Vector2 . Lerp ( Vector1 valor1 , Vector2 valor2 , Float monto )

Donde monto debe tener valores entre 0 y 1. El mtodo Lerp devolver un nuevo Vector2 que estar mas cercano a valor1, mientras mas cercano est monto a 0 y, viceversa, devolver un Vector2 mas cercano a valor2 cuando monto tienda a 1. Un ejemplo para el uso de Lerp sera. En un videojuego tenemos un misil redirigido. podramos, en base a la distancia existente entre el misil y algn enemigo poder determinar el curso a seguir por el misil, suponiendo que si no esta cercano a un enemigo el misil deba seguir una linea recta y si est cerca de un enemigo deba avanzar hacia l. Algunas propiedades utilizadas son:

Vector2.Zero() Vector2.One()

Devuelve un Vector2 con los valores X e Y iguales a cero. Devuelve un Vector2 con los valores X e Y iguales a uno.

78

4.3. MATHHELPER

CAPTULO IV. FSICA

Para obtener ms informacin sobre Vector2 y sus mtodos es recomendable revisar la MSDN de Microsoft

4.3.

MathHelper

MathHelper posee un conjunto de mtodos trigonomtricos tiles en el clculo de posiciones, balstica, ondas, etc... MathHelper opera los ngulos en base a radianes 4.1.

Figura 4.1: Circunferencia en Radianes

Si estamos acostumbrados a trabajar con grados, debemos saber convertir de grados a radianes para operar con ngulos en XNA a travs de MathHelper. Ver la imagen 4.2 sobre conversin entre radianes y ngulos, adems muestra el comportamiento de las funciones trigonomtricas esenciales(seno, coseno, tangente, cotangente, secante y cosecante) . Los campos o miembros que nos entrega MathHelper para algunas operaciones son:

Representa la constante matemtica e Representa el logaritmo base 10 de e.

Log10E Log2E Pi

Representa el logaritmo base 2 de e

Representa el valor de Pi. Representa el valor de Pi medio (Pi dividido por 2). Representa el valor de Pi cuarto (Pi dividido por 4).

PiOver2 PiOver4 TwoPi

Representa el valor de 2 Pi (2 veces Pi).

Para saber mas sobre MathHelper tambin es recomendable revisar la MSDN de Microsoft

1 http://msdn.microsoft.com

79

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.2: Radianes y Grados

4.3.1. Colisiones 2D
En el mundo real, cada accin tiene una reaccin y es as como tambin en un videojuego un elemento no debe estar indiferente a otro. una nave espacial no debera atravesar otra nave espacial como si nada. es por ello que en los videojuegos esta interaccin entre elementos se trata con colisiones. XNA nos entrega dos clases para tratar colisiones, estas son:

BoundingBox

Sirve para detectar colisiones en guras rectangulares Sirve para detectar colisiones en guras circulares

BoundingSphere

Para ello se crea un borde por gura, y si estos bordes coinciden uno del otro se provoca una colisin

80

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.3: BoundingBox

81

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.4: Colisin

BoundingBox
Esta clase crea bordes no visibles sobre la gura para la deteccin de colisiones. Para usarla debemos declarar una variable del tipo BoundingBox. Se debe crear una variable distinta por cada gura que querramos conocer si hay o no colisin. Adems de detectar colisin tambin podemos saber si un objeto esta dentro de otro. En el mtodo Update es cuando se crea el borde invisible alrededor de la gura 4.3.1. y al cual le debemos ingresar dos parmetros del tipo Vector3 para indicar el inicio y n del borde. f i g u r a _ c a j a = new BoundingBox ( V e c t o r 3 min , Vector3 max ) ;

min max

La posicin de nuestra textura (x,y,z). Sera la posicin de nuestra textura mas el ancho y alto de la misma(x,y,z).

Con estos dos puntos formara el BoundingBox que rodeara a nuestra textura 4.5. El valor de z para ambos puntos es 0 ya que tratamos con guras 2D.

82

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.5: Vector3 min y max

El BoundingBox se crea en el mtodo Update ya que con movimiento las posiciones siempre estarn cambiando y este borde siempre debe acompaar a la gura. En el Update tambin cuando preguntamos si hubo colisin. Hay dos tipos de deteccin:

Intersect Contains if
{

Chequea si un BoundingBox toca otro BoundingBox o BoundingSphere. Chequea si un BoundingBox contiene todo el volumen de otro BoundingBox.

( bbox1 . I n t e r s e c t ( bbox2 ) ) p o s i c i o n .X

5;

if
{

( bbox_1 . C o n t a i n s ( bbox_2 ) == ContainmentType . C o n t a i n s ) p o s i c i o n .X

5;

Ejemplo:
Para este ejemplo utilizaremos variables del tipo bool (booleanas) para mostrar si hubo o no colisin, adems sabremos si un objeto esta o no dentro del otro.

83

4.3. MATHHELPER

CAPTULO IV. FSICA

Declaracin de variables:4.6

Figura 4.6: Variables BoundingBox

Inicialisacin de las variables de posicin: 4.7

Figura 4.7: Inicialisacin

Cargando las cajas y la fuente:

84

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.8: Cargando Cajas

Mtodo Update:

Figura 4.9: Update cajas

85

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.10: Update cajas (Continuacin)

Mtodo Draw: 4.11

86

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.11: Draw cajas

Como resultado de este cdigo obtendremos

87

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.12: Resultado BoundingBox Intersect

88

4.3. MATHHELPER

CAPTULO IV. FSICA

Figura 4.13: Resultado BoundingBox Contains

BoundingSphere
La diferencia que tiene esta clase con respecto a BoundingBox es que el rea que comprende es circular. Para utilizarla debemos declarar una variable del tipo BoundingSphere 4.3.1.

BoundingSphere

bsphere ;

Luego crear el borde no visible en el mtodo Update 4.14 bsphere =

new

BoundingSphere (

Center ,

Radius ) ;

Donde los parmetros son:

center

Ac ponemos el centro de la textura y luego le sumamos la posicin para que el

centro siempre se mueva con la textura.

89

4.3. MATHHELPER

CAPTULO IV. FSICA

radius

Es hasta donde llega el redondo desde el centro hacia fuera, con eso sabe de que

dimetro sera.

Figura 4.14: BoundingSphere En cdigo funcional la creacin del borde seria: 4.3.1 bsphere =

new

B o u n d i n g S p h e r e ( new V e c t o r 3 ( new V e c t o r 2 ( redondo_1 . Width / 2) + posicion_1 , 0) ,

2, /

redondo_1 . H e i g h t

redondo_1 . Width

Para vericar las colisiones se utilizan los mismos mtodos que con BoundingBox (Intersect y Contains) 4.3.1. if { // C u a l q u i e r } if { // c u a l q u i e r } Podemos comparar Ambos mtodos, si un objeto rectangular colisiona con uno circular 4.3.1 i f ( bbox . I n t e r s e c t ( b s p h e r e ) ) { // Alguna } accin accin ( bsphere_1 . I n t e r s e c t s ( bsphere_2 ) ) accin ( b s p h e r e _ 1 . C o n t a i n s ( b s p h e r e _ 2 ) == ContainmentType . C o n t a i n s )

90

4.4. FUERZA GRAVITACIONAL.

CAPTULO IV. FSICA

Las posibilidades que nos entrega el detectar colisiones en un juego es bastante amplia. desde agregar un poco de realidad al juego, aumentar la interactividad de este. Hasta facilitarnos el como hacer las cosas en nuestro juego, y pasar de un juego sencillo para el usuario a uno complejo y llamativo. Un ejemplo de como las colisiones nos facilitan la programacin y adems ayudan a aumentar la complejidad de este sera. Si queremos tener un enemigo de tamao considerable en nuestro videojuego y que el jugador vaya destruyendo partes de este. o talvez dejar solo algunos puntos dbiles de difcil acceso y as aumentar la dicultad del enemigo. podemos crear varios BoundingBox o BondingSphere que acompaen el tamao considerable de nuestro enemigo 4.15.

Figura 4.15: Complejidad de colisiones

4.4.

Fuerza Gravitacional.

La fuerza fundamental de la gravedad permitir que en nuestro videojuegos sus elementos no oten caoticamente por la pantalla. Un cuerpo no cae siempre con la misma velocidad, a menos que se encuentre en el vaci. por ello para hacer de un videojuego un poco mas real, es que se agrega el factor gravedad el cual har que un objeto caiga y acelere al hacerlo.

4.4.1. Implementacin de Gravedad.


Primero declaramos las variables a utilizar 4.16. donde las mas importante son la masa del objeto y el tiempo en que el objeto comienzo a caer.

91

4.4. FUERZA GRAVITACIONAL.

CAPTULO IV. FSICA

Figura 4.16: Variables para gravedad

Inicialisamos las variables en el mtodo Initialize 4.17

Figura 4.17: Initialize con gravedad

posInicial sera igual a la posicin donde se dibujo la esfera y vel_xy sera la velocidad con que fue lanzada la esfera. Si a vel_xy le asignamos el valor (0,0) signica que solo cae por lo tanto sera una cada libre Ahora en el mtodo Update.

92

4.4. FUERZA GRAVITACIONAL.

CAPTULO IV. FSICA

Figura 4.18: Update gravedad

Cuando presionamos la tecla G, nuestra esfera caer. si a vel_xy le asignamos los valores (0,0) veremos ele efecto cada libre, de lo contrario apreciaremos la trayectoria de un proyectil 4.20.

Figura 4.19: Resultado Cada Libre

Para el efecto cada libre 4.19 se modicaron la variable pos para hacer caer la esfera al medio de la pantalla.

93

4.4. FUERZA GRAVITACIONAL.

CAPTULO IV. FSICA

Figura 4.20: Trayectoria de un proyectil

La formula que se implemento en el cdigo, originalmente es:

P osicion = P osicionInicial M asa T iempo2

94

Captulo V Conclusiones y trabajos futuros

95

5.1. CONCLUSIONES

CAPTULO V. CONCLUSIONES Y TRABAJOS FUTUROS

5.1.

Conclusiones

El desarrollo de videojuegos es una ardua y extensiva tarea, y mas aun si se desea entrar al mercado actual de desarrollo de videojuegos, donde las exigencias aumentan, segn la oferta y los avances tecnolgicos. Si bien esto puede hacer cambiar de parecer a muchos quienes pensaron en inmiscuirse en este mundo. Aun queda la posibilidad de lograr algo grande. El xito de un videojuego puede radicar en otros aspectos no solo en el alto contenido grco y la tecnologa que se utilice en este. Sobre los objetivos, se ha logrado el objetivo principal de esta tesis, planteado en un principio 1.1.1. Que fue desarrollar un prototipo de videojuego estilo arcade para PC con XNA. Se lograron cada uno de los objetivos especcos planteados con aterioridad. Obteniendo un logro ms all de lo planteado en un principio ya que se gano experiencia en el uso de XNA y el manejo de errores sobre este. En la actualidad se pueden apreciar gran cantidad de juegos con un contenido grco impresionante, donde el agua, la iluminacin y sombras son un deleite para la vista, texturas en alta calidad, manejo de partculas, por mencionar algunos. Pero juegos sencillos, sin tanta posibilidad grca han recaudado grandes cantidades de dinero y se han hecho muy populares, ejemplos de ellos son los juegos creados por Zynga en Facebook, donde todos sus juegos tiene la opcin de comprar elementos de juego con tarjeta de crdito. o Angry Birds creado para el Iphone y ahora en su versin para Android, donde ya supero los dos millones de descargas. Esto signica que aun hay un mercado que no requiere tantos costos y tiempo para lograr sobresalir y ganar dinero, Este mercado es el de los SmartPhones, Tablets PC, Xbox Live y WiiWare de Nintendo entre otros. Por lo que posibilidades de ganancias y fama aun estn abiertas. XNA como herramienta logra proveer lo necesario para el desarrollo de videojuegos, adems facilita su tarea. La libreras que posee, abarcan practicamente todo lo necesario para el desarrollo de videojuegos. con XNA podremos desarrollar juegos 2D y 3D. trabajar con texturas de alta calidad, importar modelos 3D desde Autodesk 3ds Max , utilizar contenido multimedia. implementar fsica al videojuego juego sin tener que crear desde cero las funciones matemticas que lo permiten, ya que posee varios mtodos ya probados. Si un programador es exigente y quiere realizar un videojuego con alto contenido grco, tambin lo puede hacer, ya que XNA fue construido sobre DirectX pudiendo utilizar gran cantidad de APIs que trabajan con tareas complejas. En resumen las principales ventajas que tiene XNA y el uso de C# son: C# es un lenguaje moderno y ecaz. Hereda toda la potencia de C++. Esta desarrollada sobre la plataforma .NET C# es un lenguaje compilado, por lo tanto ms velocidad.

1 Aplicacin

para el desarrollo de modelos y animaciones en 3D

96

5.2. TRABAJOS FUTUROS CAPTULO V. CONCLUSIONES Y TRABAJOS FUTUROS

XNA tiene soporte para desarrollar juegos 2D y 3D. El framework XNA esta construido sobre DirectX. No es difcil de comenzar a utilizar Puedes publicar tu juegos para PC, Xbox 360, Zune y a partir de la versin 4.0 de XNA Game Studio se suma la plataforma Windows Phone 7. Y algunas Desventajas: No Posee cdigo abierto. Soporta solo plataformas de Microsoft. Poco soporte en espaol. Para vdeo solo soporta el formato wma. Si se busca comenzar en el mundo del desarrollo de videojuegos, XNA Game Studio es una excelente opcin. tanto para quienes buscan desarrollar algo simple como complejo. adems ya hay mucha gente que lo esta utilizando por lo que es posible encontrar informacin en las comunidades de XNA. El prototipo Actual en el que me encuentro trabajando de nombre CanonSlaught es un videojuego en el que se controla un can mediante su rotacin, el cual debe evitar que los enemigos crucen desde la derecha a izquierda. Este prototipo es un videojuego en 2D al cual se le agrego msica, efectos de sonido y de partculas.

5.2.

Trabajos Futuros
Complementar el prototipo agregando mas etapas y mejorando la fsica de este. Aprender Modelado 3D con Autodesk 3ds Max. Aprender sobre el desarrollo de videojuegos en tres dimenciones. Iniciar un proyecto de videojuego en 3D.

97

Apndice A Apndice

98

1.1. ALGUNOS VIDEOJUEGOS CREADOS CON XNA.

APNDICE A. APNDICE

1.1.

Algunos videojuegos creados con XNA.

Siguiendo algunos tutoriales en Internet, se logro crear algunos videojuegos clsicos como Pong e Space Invaders 1.1.

Figura 1.1: Pong y Space Invaders con XNA

99

1.1. ALGUNOS VIDEOJUEGOS CREADOS CON XNA.

APNDICE A. APNDICE

Tambin se modico el cdigo de Space Invaders agregandole nuevos sprites, msica, efecto de disparo y la tcnica ScrollParallax.

Figura 1.2: Invasin

Por ultimo el proyecto el cual esta en desarrollo que es CanonSlaught 1.3. Un juego en dos dimensiones, el cual se utiliza un can para destruir naves enemigas y monstruos. El cual contara con men, msica, efectos de sonido y partculas. adems de la tcnica ScrollParallax.

100

1.1. ALGUNOS VIDEOJUEGOS CREADOS CON XNA.

APNDICE A. APNDICE

Figura 1.3: Juego CanonSlaught

101

Das könnte Ihnen auch gefallen