Programación de videojuegos con LibGdx. Javier Villegas Gomez



Documentos relacionados
1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

15. ANEXO # 5 GAMEPLAYOBJECT

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

Vamos a crear nuestro primer juego en el que tendremos que coger la comida que esta protegida por los gatos

Curso de introducción a videojuegos multiplataforma con SDL

Segunda práctica de Programación 2

Trabajo Práctico N 4: Diseño por Contratos

Introducción al tipo de dato ARRAY

Programación Orientada a Objetos con Java

PART II: Moviendo al jugador

Programa Tracker : Cómo generar Vectores y sumarlos

Paso 1 de 13. Paso 2 de 13. Guía de aprendizaje de Flash CS5 Tutorial 3. Creación de un logotipo textual.

SCRATCH APRENDE A PROGRAMAR JUGANDO

Introducción a la programación orientada a objetos

Roberto Quejido Cañamero

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO)

MANUAL DE PROCEDIMIENTO PARA LA PRESENTACIÓN DE PROYECTOS EN CONVOCATORIAS DE INNOVACIÓN DOCENTE POR ADMINISTRACIÓN ELECTRÓNICA

1.- MENU DE CONTROL O MENU VENTANA: permite cerrar la ventana cambiarla de tamaño y pasar a otra ventana

SOLUCION EXAMEN junio 2006

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Modulo 1 El lenguaje Java

Manual del Usuario Groupware

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Introducción a la Programación Orientada a Objetos

Examen Septiembre Curso Programación en C++ Pág. 1

Administración Local Soluciones

Manual de Microsoft Power Point 2007 Parte 2 Universidad Politécnica de San Luis Potosí

MICROSOFT WORD 2007 AVANZADO. Unidad Didáctica Nº 1

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Gestión de Retales WhitePaper Noviembre de 2009

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

GAME MAKER JUEGO DE LABERINTOS

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

Manual de NVU Capítulo 4: Los enlaces

Guadalinex Básico Impress

Sesión No. 11. Contextualización INFORMÁTICA 1. Nombre: Gestor de Base de Datos (Access)

Desarrollo de Aplicaciones con App Inventor. Wings: Vuela sin estrellarte contra las rocas

Programación Gráfica 2D ( IV ) Tilemapping.

Importador Universal - Operaciones

6ª Práctica. Matlab página 1

Para crear una actividad, pulsamos sobre la pestaña actividades

Proyecto visual C# 2005 Express Edition: Imprimir Página 1 de 5

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

Algoritmos. Autor: José Ángel Acosta Rodríguez

1º: Antes de nada y para aquellas personas que tienen, un router debéis saber que lo primero es Abrir los puertos del gp500, dichos puertos son:

Balón Prisionero. Introducción. Scratch

Introducción a Moodle

MACROS Y FORMULARIOS

Cómo convertir texto de Word en una tabla de datos en Excel (todas las versiones)

Proyecto de ISIII. Pruebas Extra. Pruebas de Caja Blanca

MICROSOFT EXCEL Introducción: Qué es y para qué sirve Excel2007? TECNOLOGIA/ INFORMATICA: MS-EXCEL

Técnico Profesional en Diseño y Desarrollo de Videojuegos con Game Maker

El Escritorio. En el escritorio tenemos iconos que permiten abrir el programa correspondiente.

Práctica 2: Simón dice

Fuentes de información y plataformas de almacenamiento de información P08/93150/01582

Prof. Dr. Paul Bustamante

Problemas de Redes de Computadores. Conjunto de problemas 1

DISEÑADOR DE ESCALERAS

GUIA RAPIDA BDP TÁCTIL

MATLAB en 30 minutos

Durante los próximos días aprenderemos todo lo necesario para exportar modelos animados desde el 3D Studio MAX hasta nuestro videojuego.

NemoTPV SAT Manual de usuario 1. NemoTPV SAT APLICACIÓN DE GESTIÓN DE SERVICIO TÉCNICO PARA PUNTOS DE VENTA DE EUSKALTEL

Tema 2. El lenguaje de programación Java (Parte 1)

Guía de integración del módulo Paga+Tarde en Prestashop

INSTRUCTIVO PARA LA CREACIÓN DE PÓSTER DIGITAL CON PowerPoint Versión 2010

COMANDOS EN LENGUAJE DE PROGRAMACIÓN BASIC

Módulo I - Word. Iniciar Word Finalizar Word Definición de elementos de pantalla Escribir texto en un documento El cursor...

APUNTES JAVA ARRAYS (ARREGLOS) Un arreglo es un grupo de posiciones de memoria contiguas. Todas las cuales tienen el mismo nombre y el mismo tipo.

GUÍA BÁSICA WINDOWS MOVIE MAKER

Benemérita Universidad Autónoma del Estado de Puebla

Refactorizar (v) Reestructurar el software aplicando una secuencia de refactorizaciones.

MOODLE PARA ASESORES, GUIA DE APOYO.

CIERRE DE PERÍODOS DE LIQUIDACIÓN

Imprimir códigos de barras

Formularios. Formularios Diapositiva 1

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Práctica 8. Entornos SCADA. Funciones avanzadas de WinCC.

Si es la primera vez que trabajas con Power Point, lo que debes hacer es localizar el botón de inicio. después haz doble clic sobre el icono

Tema 3. Test Driven Development

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

KIG: LA GEOMETRÍA A GOLPE DE RATÓN. Asesor de Tecnologías de la Información y de las Comunicaciones

MANUAL DE USUARIO. Sistema CLASS Estudiantes. Versión 2013 i. Derechos Reservados

generar columnas de texto y números disponer texto en columnas paralelas (para traducciones por ejemplo) situar imágenes junto a textos.

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Práctica 2 Gráficos Vectoriales con SVG (versión )

KODU Game Lab es un sencillo programa que ayuda a los más pequeños a crear sus propios videojuegos desde cero de manera sencilla y entretenida.

FACULTAD DE INGENIERÍA

Biografía en Facebook

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

GUÍA DE APRENDIZAJE No. Windows Movie Maker ESTUDIANTE: FECHA:


Tutorial de Creación de Nuestro Videojuego con Game Maker

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

ENTORNO DE TRABAJO DE WORD 2007

E7: REPOSTAR-COCHE FONDOS (ESCENARIOS)

Tutorial de Introducción a la Informática Tema 3 Mecanografía. Mecanografía. 1. Objetivos

Pilas (Práctica 3) import pilas from random import randint # Vamos a necesitar generar números al azar

Transcripción:

Programación de videojuegos con LibGdx Javier Villegas Gomez

Índice -Arquitectura de un videojuego -Funcionamiento de un videojuego -LibGdX -Ejemplo: Hello world -Personaje principal - Movimiento -Ejercicio 1 -Obstáculos -Colisiones -Ejercicio 2 -Animaciones -Ejercicio 3 -Enemigo, jerarquía de clases -Optimización del código

Arquitectura de un videojuego Los videojuegos de acción suelen tener muchos elementos en movimiento a la vez: Personajes Enemigos Balas (disparos) El fondo y demás objetos Cómo lo programamos?...

Funcionamiento de un videojuego GAME LOOP (Bucle principal) En él se lee la entrada del usuario, se procesa actualizando las estructuras de datos internas del juego y después se muestra el resultado al usuario (imágenes, sonidos, etc.) muchas veces por segundo.

Funcionamiento general 1º - Inicialización 2º - Game Loop (Bucle principal, en el que se actualizan y dibujan todos los cambios) 3º - Liberar memoria

Como funciona LibGdx

Estructura de LibGDX Se divide en 4 módulos: -Marco de aplicacion: maneja el bucle principal y el ciclo de vida -Componente de graficos: gestiona imagenes y objetos gráficos en pantalla -Componente de audio: acceso a sonido y música de la aplicación -Componente de E/S (files): lee y escribe en los ficheros de datos (imágenes, configuracion, sonido...) -Componente de Entrada (input): gestiona la entrada por teclado, pantalla tactil, acelerometro...

Hello World, muy visual Texture MenuTexture; SpriteBatch batch; public MenuPrincipal(HelloWorld helloworld) { this.helloworld = helloworld; MenuTexture = new Texture("data/PantallaMenu.png"); MenuTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear); batch = new SpriteBatch(); public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); batch.begin(); batch.draw(menutexture, 0, 0, MenuTexture.getWidth(), MenuTexture.getHeight()); batch.end();

Creamos nuestro personaje public class Turing { Vector2 posicion; //Un vector2 es un vector de 2 elementos float anchura, altura; Rectangle bordes; float velocidad; float SPEED; public Turing(Vector2 posicion, float anchura, float altura){ this.posicion = posicion; this.anchura = anchura; this.altura = altura; bordes = new Rectangle(posicion.x, posicion.y, anchura, altura); this.speed = 100;

Y le damos movimiento Dentro de la clase Turing: public void update() { if(gdx.input.iskeypressed(keys.d)){ posicion.x = posicion.x + Gdx.graphics.getDeltaTime() * SPEED; bordes.x = posicion.x; bordes.y = posicion.y;

Ejercicio 1 - Completar movimiento a la izquierda - Corregir el salto Pista: usar variables de estado para controlar la subida y la bajada Ejemplo: boolean saltando, enelsuelo...

Creamos un obstáculo: Plataforma Tan simple como crear una clase que represente la altura, anchura y posicion de la plataforma. public class Plataforma { public Vector2 posicion; public float anchura; public float altura; public Rectangle bordes; public Plataforma(Vector2 posicion, float anchura, float altura){ this.posicion = posicion; this.anchura = anchura; this.altura = altura; bordes = new Rectangle(posicion.x, posicion.y, anchura, altura); Y Turing debe recibir las plataformas, para saber cuando colisiona con ellas turing = new Turing(new Vector2(10,10), texturaturing.getwidth()/3, texturaturing.getheight()/3, plataforma);

Colisión Nos ayudamos de la función overlaps boolean Colisiona(Rectangle a, Rectangle b){ if(a.overlaps(b)){ // nos devuelve verdadero si dos rectángulos se solapan return true; return false; Problema: Como sabemos de que lado proviene la colisión? Por arriba o por la derecha?

Colisión Solución: Prevenir la colisión - Si el siguiente movimiento a la derecha provoca colisión, bloqueamos el movimiento a la derecha, y así en las demás direcciones

Ejercicio 2 - Las colisiones fallan por los lados, en cuanto choca empieza a bajar, y por abajo no colisiona, atraviesa el obstáculo, que falla?

Animaciones Necesitamos: Sprite de imágenes: TextureRegion[] turingdchaframes; //Vector de TextureRegion TextureRegion[] turingizqframes; // Aqui almacenaremos cada imagen del sprite de la animación TextureRegion frameactual; // se encargara de dibujar el frame correspondiente float statetime; // Segundos desde que comienza la animación Animation turingdcha; // El objeto animacion Animation turingizq;

Animaciones Lo inicializamos todo: TextureRegion[][] tmp = TextureRegion.split(texturaturingdcha,texturaturingdcha.getWidth()/20, texturaturingdcha.getheight()/1); turingdchaframes = new TextureRegion[20*1]; int indice = 0; for (int i = 0; i < 1; i++) { for (int j = 0; j < 20; j++) {// aqui rellenamos el vector con cada imagen turingdchaframes[indice++] = tmp[i][j]; turingdcha = new Animation(0.05f, turingdchaframes); // y creamos la animacion con el array de sprites. turingizq = new Animation(0.05f, turingizqframes);

Animaciones Y los utilizamos: turing.update(); statetime = turing.getstatetime(); // statetime = (statetime + Gdx.graphics.getDeltaTime()); if(turing.getdireccion() == 1){ frameactual = turingdcha.getkeyframe(statetime, true); else{ frameactual = turingizq.getkeyframe(statetime, true); batch.begin();... batch.draw(frameactual, turing.getposicion().x, turing.getposicion().y, turing.getanchura(), turing.getaltura()); batch.end();

Ejercicio 3 -La animación sólo funciona hacia la derecha... Que le falta?

Enemigo, Jerarquía de clases La clase Enemigo es muy similar a la clase Turing o Personaje, en ese caso... por qué no aprovechar algunas características?

Enemigo, Jerarquía de clases De esta manera, las subclases nos quedan mucho más simplificadas: public class Enemigo extends EntidadMovible{ int movimiento; // El movimiento del enemigo public Enemigo(Vector2 posicion, float anchura, float altura, int direccion) { super(posicion, anchura, altura, direccion); this.movimiento = 50; public class Plataforma extends Entidad{ public Plataforma(Vector2 posicion, float anchura, float altura) { super(posicion, anchura, altura);

Optimizando el código Para estructurar aun mas el codigo, separamos tanto la E/S como la detección de colisiones del código general. CollisionHandler se encargara de las colisiones, para ello recibirá todos los elementos necesarios: Personaje, plataformas, enemigos... en lugar de hacerlo desde el propio personaje

Optimizando el código InputHandler se encargara de la Entrada, para ello utilizamos la clase de LibGdx InputProcessor que nos permitirá controlar las teclas pulsadas

Optimizando el codigo public class InputHandler implements InputProcessor { Turing turing; public InputHandler(Turing turing) { this.turing = turing; //Aqui van las funciones para el manejo de cada tecla Y simplemente en GameScreen: Gdx.input.setInputProcessor(new InputHandler(turing));

Gracias por vuestra atencion! Este programa ha sido realizado con financiación del Proyecto de Mejora Docente "Consolidación de los conocimientos de programación mediante el desarrollo de videojuegos: una experiencia en el año de Turing" (código AAA_13_019) de la Convocatoria de Actuaciones Avaladas para la Mejora Docente, Formación del Profesorado y Difusión de Resultados de la Unidad de Innovación Docente de la Universidad de Cádiz, Curso 2012/2013, cuyos fondos proceden de la Consejería de Economía, Innovación, Ciencia y Empleo de la Junta de Andalucía.