Grado En Ingeniería Informática
Total Page:16
File Type:pdf, Size:1020Kb
Escuela de Ingenierías I.I. Industrial, Informática y Aeroespacial GRADO EN INGENIERÍA INFORMÁTICA Trabajo de Fin de Grado Diseño y desarrollo de un motor de videojuego utilizando C++ y SFML. Ejemplo de uso: Graphiure Autor: Dorian Cadenas Álvarez Tutor: Lidia Sánchez González Página 1 UNIVERSIDAD DE LEÓN Escuela de Ingenierías I.I. GRADO EN INGENIERÍA INFORMÁTICA Trabajo de Fin de Grado ALUMNO: Dorian Cadenas Álvarez TUTOR: Lidia Sánchez González TÍTULO: Diseño y desarrollo de un motor de videojuego utilizando C++ y SFML. Ejemplo de uso: Graphiure CONVOCATORIA: Julio, 2015 RESUMEN: El presente Trabajo Fin de Grado (TFG) consiste en el estudio y desarrollo de un motor de videojuegos. Los objetivos que se marcan es comprender las bases de un motor de videojuego, entender sus fundamentos y arquitecturas, diferentes enfoques con sus ventajas y desventajas y comprender cómo afecta cada una de sus partes al desarrollo y ejecución del juego final que se desarrolla sobre el motor. Para ello, se ha realizado un proyecto inicial, intentando clonar el juego del Tetris, y con el que realizar la toma de contacto con el lenguaje C++ y las librerías SDL y SFML. Mientras, se procedía a la lectura y estudio de bibliografía recomendada, en los que se analiza la arquitectura de los motores, los diferentes enfoques con sus ventajas y desventajas y algunos motores de ejemplo que implementan dichas estrategias. Posteriormente, con las bases establecidas y escogido la librería SFML para la realización del proyecto, se procedió a programar un motor sencillo aplicando algunas de las estrategias aprendidas y entender y experimentar de primera mano la estructura, funcionamiento y complejidad de un motor. Para ello se desarrolló conjuntamente un esbozo de videojuego que permite probar y observar el efecto del motor sobre el juego. Para el juego se utilizó como ayuda la librería tinyXML2 para el manejo de recursos. El resultado del proyecto resulta satisfactorio tanto en resultados técnicos del motor realizado como en el cumplimiento de los objetivos marcados. Palabras clave: motor de videojuego, arquitectura de motor, videojuego. Firma del alumno: VºBº Tutor: Página 2 Índice de contenidos 1 Introducción ............................................................................ 7 1.1 Motivación ......................................................................... 7 1.2 Objetivo ............................................................................ 8 1.3 Recursos ............................................................................ 8 1.4 Estructura del documento ....................................................... 8 2 El motor de videojuego ............................................................... 9 2.1 Definición .......................................................................... 9 2.1.1 Tipos de motores ........................................................... 10 2.1.2 Motores dirigidos por datos................................................ 10 2.2 Géneros de juegos y las características de sus motores ................... 11 2.3 Arquitectura de un motor ...................................................... 14 2.3.1 El componente de tiempo de ejecución ................................. 14 2.3.2 La suite de herramientas .................................................. 21 2.4 Gestión de la memoria .......................................................... 21 2.5 Guardar y cargar opciones ...................................................... 24 2.6 Los recursos y el sistema de ficheros ......................................... 25 2.6.1 Organización de recursos .................................................. 26 2.6.2 Identificación, registro y tiempo de vida de recursos ................. 27 2.6.3 Formatos de ficheros ....................................................... 29 2.6.4 Referencias cruzadas ....................................................... 29 2.7 El tiempo .......................................................................... 29 2.7.1 Frame rate y tiempo delta ................................................ 31 2.7.2 Timelines ..................................................................... 33 2.8 Animaciones y gráficos .......................................................... 33 2.8.1 Gráficos ...................................................................... 33 2.8.2 Animaciones ................................................................. 36 2.9 La física ........................................................................... 37 2.9.1 El sistema de detección de colisiones ................................... 39 2.9.2 Estructuras de colisiones .................................................. 40 2.9.3 Las figuras colisionables ................................................... 40 2.9.4 Primitivas de colisión....................................................... 41 2.9.5 Cálculo de las colisiones ................................................... 43 2.9.6 Otras tareas de las colisiones ............................................. 46 2.9.7 Filtro de colisiones ......................................................... 47 Página 3 3 Gameplays ............................................................................. 48 3.1 Anatomía del mundo del juego ................................................ 49 3.2 Niveles ............................................................................. 50 3.2.1 Editor de niveles ............................................................ 50 3.3 Objetos de juego ................................................................ 50 3.3.1 Arquitecturas del modelo de objetos .................................... 51 3.4 Formatos de dato de niveles ................................................... 57 3.5 Guardado de juegos ............................................................. 58 3.6 Carga y streaming de mundos ................................................. 59 3.7 Gestión de la memoria en los spawning ...................................... 61 3.8 Referencias y consultas de objetos ........................................... 62 3.9 Actualización de objetos en tiempo real ..................................... 64 3.9.1 Dependencias entre objetos y subsistemas ............................. 64 3.10 Eventos y paso de mensajes ................................................. 66 4 Desarrollo.............................................................................. 67 4.1 Estudio de C++ ................................................................... 67 4.2 Uso de SDL y SFML ............................................................... 68 4.3 Herramientas y librerías usadas ............................................... 69 4.4 Planificación y estudio económico ............................................ 70 4.4.1 Planificación ................................................................. 70 4.4.2 Estudio económico .......................................................... 74 4.5 Codificación ...................................................................... 75 4.5.1 Requerimientos ............................................................. 75 4.5.2 Casos de uso ................................................................. 76 4.5.3 Datos guardados............................................................. 76 4.5.4 Patrones y estrategias ..................................................... 79 4.5.5 Tips programación .......................................................... 87 4.6 Pruebas y resultados ............................................................ 89 5 Conclusiones .......................................................................... 90 6 Líneas futuras ......................................................................... 90 Lista de referencias ....................................................................... 91 Anexo A: Manual de usuario .............................................................. 94 Anexo B: Manual de programador ..................................................... 101 B.1 Introducción al manual del programador ..................................... 101 B.2 Estructura general de desarrollo ............................................... 101 Página 4 B.3 Estructura del código fuente ................................................... 102 B.3 Detalles de los módulos de código fuente .................................... 103 B.3.1 Módulo Utilities .............................................................. 103 B.3.2 Módulo GUI ................................................................... 104 B.3.3 Módulo Application ......................................................... 104 B.3.4 Módulo States ................................................................ 105 B.3.5 Módulo ConcreteStates ..................................................... 106 B.3.6 Módulo Resources ........................................................... 106 B.3.7 Módulo Music ................................................................. 107 B.3.8 Módulo Entities .............................................................. 107 B.3.9 Módulo Systems .............................................................. 107 B.3.10 Módulo World ............................................................... 111 B.3.11 Módulo Properties ......................................................... 113 B.3.12 Módulo GameState ........................................................ 113 B.3.13 Módulo Quest ............................................................... 113 B.3.14 Módulo