Top Banner
10

Guía de programacion de videojuegos II

Jul 05, 2015

Download

Education

Segunda parte de la guia sobre como programar videojuegos.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Guía de programacion de videojuegos II

Jose Ignacio Alamos Javier Letelier Ruiz

Jestudio.cl

Capitulo 2

GUIAProgramación de video juegos

Page 2: Guía de programacion de videojuegos II

Capitulo Colisiones Dinamismo y animaciones, ..

En la entrega anterior aprendimos el esquema básico de un juego simple , bastante diría yo( , ) En ésta tocaremos el tema de las colisiones el dinamismo. , de los juegos y la animación Por otro lado analizaremos sistemas más óptimos , . , de programación .

Ya sabemos la teoría del movimiento de las entradas y todas esas , , parafernalias Sin embargo necesitamos una serie de conceptos que harán. , posible el desempeño de un juego El primer concepto es la . colisión.

¿Qué demonios es una colisión ? Nos referimos a una colisión a la intersección o unión de o más objetos en un 2 juego.Supongamos que estamos programando un juego estilo Pong Arcade La bola . debe saber si ha “chocado” con el bate con las paredes o con las fichas Este , , . “choque” es analizado y comprobado por un sistema de colisiones .

Analizaré sistemas de colisión El primero basado en colisión circular y el 2 : , segundo en colisión rectangular En futuras entregas analizaremos un sistema . , de colisión perfecta basado en la detección de imágenes sobrepuestas .

Colisión circular :Más de alguno ha escuchado hablar sobre el teorema de Pitágoras fórmula útil , para obtener el lado restante en un triángulo rectángulo .

Page 3: Guía de programacion de videojuegos II

222 cba =+

Donde a y b son los catetos y , c es la hipotenusa .

Imaginemos que tenemos puntos en un plano uno con coordenadas 2 , ),( 11 yx ,el segundo con coordenadas ),( 22 yx Podemos obtener la distancia entre estos. puntos utilizando un plano cartesiano y éste conocido teorema Si en uno de los : puntos trazamos una recta paralela al eje X y en el otro trazamos otra paralela , al eje Y veremos que hay un punto de intersección y que el ángulo de esta , , intersección es º definición del plano cartesiano Si creamos un segmento 90 ( ). desde el primer punto hasta la intersección y otro segmento desde la , intersección hasta el segundo punto notaremos que estos segmentos cumplen , , los requisitos para ser catetos de un triángulo rectángulo Por lo tanto la . , distancia entre estos puntos es la hipotenusa de éste triángulo , .

Podemos obtener las medidas de los catetos pues el primero es ( 12 xx − y el, segundo es 12 yy − Conociendo esto podemos reemplazar la información en la). , fórmula original :

2212

212 )()( distyyxx =−+−

Donde dist es la distancia entre los puntos 2 .

Aplicando raiz cuadrada en ambos lados podemos despejar la variable dist , ,pero en términos computacionales no es necesario Si el lado izquierdo de la , : ecuación es menor o igual al lado derecho de la ecuación entonces hay , colisión No es necesario calcular con raiz cuadrada la distancia en todos los. ciclos pues quitaría recursos, , .

En resumen hay colisión si el cuadrado de la suma de ambas diferencias de , , los componentes X e Y son menores o iguales al cuadrado de la suma de los radios de ambos objetos

Page 4: Guía de programacion de videojuegos II

Por ejemplo supongamos que tenemos objetos circulares uno de radio y el , 2 , 5, otro de radio Habrá colisión si la distancia de los centros de ambos objetos es 3. menor o igual a 8.

Implementación:

Booleano Colisión Objeto PLAYER {

Entero X Y , Entero Radio Podría no ser entera esta variable depende del caso // ,

}PLAYER jugador jugador 1, 2

Función InicializarTodo (){

jugador x jugador y las coordenadas del jugador serán1. = 1. = 30 // 1 (30,por dar un ejemplo30),

jugador x2. = 100jugador y2. = 20

Las del jugador serán// 2, (100, 20)jugador Radio1. = 5jugador Radio2. = 3Colision False=

}

Función EntradayProcesamiento (){

Si Usuario aprieta izquierda ( _ _ ()){

Jugador x Jugador x1. = 1. Ð 1}

Page 5: Guía de programacion de videojuegos II

Si Usuario aprieta derecha ( _ _ ()){

Jugador x Jugador x1. = 1. + 1}Si Usuario aprieta arriba ( _ _ ()){

Jugador y Jugador y1. = 1. Ð 1}Si Usuario aprieta abajo ( _ _ ()){

Jugador y Jugador y1. = 1. + 1}Colisión DetectarColision Jugador Jugador= ( 1, 2)

}Función DetectarColision OBJETO Jugador OBJETO Jugador Válida Si no ( 1, 2) // . acomoda pasa los argumentos Radios Coordenadas, 6 ( , ){Si Jugador x Jugador x Jugador x Jugador x Jugador y ( ( ( 2. - 1. )* ( 2. - 1. ) ) + ( ( 2. -

Jugador y Jugador y Jugador y1. )* ( 2. - 1. ) ) <= Jugador Radio Jugador Radio Jugador Radio Jugador Radio( 1. + 2. )*( 1. + 2. ) )

{Colisión detectada Devolvemos True// .

Devolver True ; Return true en la mayoría de los lenguajes//

}Si no pasa nada devolvemos False// ,

Return False

}Función Salida (){

Dibujar en pantalla IMAGEN DEL JUGAGOR Jugador x Jugador y_ _ ( _ _ _1, 1. , 1. )

Page 6: Guía de programacion de videojuegos II

Dibujar en pantalla IMAGEN DEL JUGAGOR Jugador x Jugador y_ _ ( _ _ _2, 2. , 2. )

Si Colisión True ( == ){

MostrarTexto “Los objetos están colisionando”( )}

}Función Principal argumentos Entrada del programa función main ( ) // , {

InicializarTodo()Mientras Usuario No Presione ESC ( _ _ _ ()){

EntradayProcesamiento()Salida()

}}

Este es el esquema básico de un sistema de colisión circular Es bastante útil en . los juegos .Sin embargo en otros casos podríamos necesitar un tipo de colisión , rectangular.

Colisión Rectangular :

Este método es parecido al sistema “Bounding Box” sin embargo es más , , optimizado y requiere solo las coordenadas de los objetos sus anchos y sus, , alturas.

Imaginemos que hay cuadrados en un plano que no están colisionando Al 2 , . centro de cada cuadrado hay un punto actúa como pivote central es decir la , ( ,

Page 7: Guía de programacion de videojuegos II

coordenada del cuadrado es relativa a ese punto ¿Qué condición se debe ). cumplir para que ambos cuadrados colisionen, ?

Simple Al igual que en el caso anterior de la colisión circular generemos las. , rectas perpendiculares a los ejes para generar los catetos de un triángulo , rectángulo.A la vista podemos ver que habrá colisión si se cumplen condiciones , 2 :

Que la medida del cateto paralelo al eje X sea menor o igual que la suma de* las distancias de los centros a cualquier lado paralelo al eje Y de ambos , cuadrados.

Que la medida del cateto paralelo al eje Y sea menor o igual que la suma de* las distancias de los centros a cualquier lado paralelo al eje X de ambos , cuadrados.

Si se cumplen estas condiciones entonces existe colisión rectangular , .

Implementación:

Booleano Colisión Objeto PLAYER {

Entero X Y , Entero Alto Entero Ancho

}PLAYER jugador jugador 1, 2

Función InicializarTodo (){

jugador x jugador y las coordenadas del jugador serán1. = 1. = 30 // 1 (30,por dar un ejemplo30),

jugador x2. = 100

Page 8: Guía de programacion de videojuegos II

jugador y2. = 20Las del jugador serán// 2, (100, 20)

jugador Alto1. = 20jugador Alto2. = 30 jugador Ancho1. = 20jugador Ancho2. = 40

Colision False=}

Función EntradayProcesamiento (){

Si Usuario aprieta izquierda ( _ _ ()){

Jugador x Jugador x1. = 1. Ð 1}Si Usuario aprieta derecha ( _ _ ()){

Jugador x Jugador x1. = 1. + 1}Si Usuario aprieta arriba ( _ _ ()){

Jugador y Jugador y1. = 1. Ð 1}Si Usuario aprieta abajo ( _ _ ()){

Jugador y Jugador y1. = 1. + 1}Colisión DetectarColision Jugador Jugador= ( 1, 2)

}Función DetectarColision OBJETO Jugador OBJETO Jugador Válida Si no ( 1, 2) // . acomoda pasa los argumentos Radios Coordenadas, 6 ( , )

Page 9: Guía de programacion de videojuegos II

{Entero Dist x Dist y Almacenaran las distancias del centro del 1_ , 1_ //

primer cuadrado hasta ambos lados Entero Dist x Dist y Almacenaran las distancias del centro del 2_ , 2_ //

segundo cuadrado hasta ambos lados

Calculamos las distancias de los centros de cada cuadrado// Dist x Jugador Ancho1_ = 1. / 2Dist y Jugador Alto1_ = 1. / 2

Dist x Jugador Ancho2_ = 2. / 2Dist y Jugador Alto2_ = 2. / 2

Planteamos ambas condiciones// Si Jugador x Jugador x Dist x Dist x Y Jugador y( ( 2. Ð 1. ) <= ( 1_ + 2_ ) ( 2. Ð Jugador y Dist y Dist y1. ) <= ( 1_ + 2_ ){

Colisión detectada Devolvemos True// . Devolver True Return true en la mayoría de los lenguajes ; // }

Si no pasa nada devolvemos False// , Return False

}Función Salida (){

Dibujar en pantalla IMAGEN DEL JUGAGOR Jugador x Jugador y_ _ ( _ _ _1, 1. , 1. )Dibujar en pantalla IMAGEN DEL JUGAGOR Jugador x Jugador y_ _ ( _ _ _2, 2. , 2. )

Si Colisión True ( == ){

Page 10: Guía de programacion de videojuegos II

MostrarTexto “Los objetos están colisionando Utilizando colisión( ( rectangular ”) )

}}Función Principal argumentos Entrada del programa función main ( ) // , {

InicializarTodo()Mientras Usuario No Presione ESC ( _ _ _ ()){

EntradayProcesamiento()Salida()

}}