SlideShare a Scribd company logo
1 of 10
Download to read offline
Cpu 2
 ai l
  to




GI
 UA                 J td .
                    e ui l
                     s o c

        Po rmai d v e je o
         rga c n e i o u g s
              ó    d




J s In c Aa s
 oe g ai l
        o mo        J v r eee R i
                     a i L tlr u
                       e    i   z
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 2 o más objetos en un
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é 2 sistemas de colisión: El primero basado en colisión circular, y el
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.
a2 + b2 = c2


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


Imaginemos que tenemos 2 puntos en un plano, uno con coordenadas ( x1 , y1 ) ,
el segundo con coordenadas ( x 2 , y 2 ) . 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 90º (definición del plano cartesiano). Si creamos un segmento
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 x 2 − x1 , y el
segundo es y 2 − y1 ). Conociendo esto, podemos reemplazar la información en la
fórmula original:
( x 2 − x1 ) 2 + ( y 2 − y1 ) 2 = dist 2


Donde dist es la distancia entre los 2 puntos.


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
Por ejemplo, supongamos que tenemos 2 objetos circulares, uno de radio 5, y el
otro de radio 3. Habrá colisión si la distancia de los centros de ambos objetos es
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 jugador1, jugador2


Función InicializarTodo()
{
      jugador1.x = jugador1.y = 30 // las coordenadas del jugador 1 serán (30,
30), por dar un ejemplo
      jugador2.x = 100
      jugador2.y = 20
      // Las del jugador 2, serán (100, 20)
      jugador1.Radio = 5
      jugador2.Radio = 3
      Colision=False
}


Función EntradayProcesamiento()
{
      Si (Usuario_aprieta_izquierda())
      {
             Jugador1.x = Jugador1.x Ð 1
      }
Si (Usuario_aprieta_derecha())
      {
               Jugador1.x = Jugador1.x + 1
      }
      Si (Usuario_aprieta_arriba())
      {
               Jugador1.y = Jugador1.y Ð 1
      }
      Si (Usuario_aprieta_abajo())
      {
               Jugador1.y = Jugador1.y + 1
      }
      Colisión=DetectarColision(Jugador1, Jugador2)
}
Función DetectarColision(OBJETO Jugador1, OBJETO Jugador2) // Válida. Si no
acomoda, pasa los 6 argumentos (Radios, Coordenadas)
{
Si ( ( (Jugador2.x-Jugador1.x)* (Jugador2.x-Jugador1.x) ) + ( (Jugador2.y-
      Jugador1.y)* (Jugador2.y-Jugador1.y) ) <=
      (Jugador1.Radio+Jugador2.Radio)*(Jugador1.Radio+Jugador2.Radio) )
{
      //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_1, Jugador1.x, Jugador1.y)
Dibujar_en_pantalla(IMAGEN_DEL_JUGAGOR_2, Jugador2.x, Jugador2.y)


       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 2 cuadrados en un plano, que no están colisionando. Al
centro de cada cuadrado, hay un punto actúa como pivote central (es decir, la
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 2 condiciones:
* 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 jugador1, jugador2


Función InicializarTodo()
{
      jugador1.x = jugador1.y = 30 // las coordenadas del jugador 1 serán (30,
30), por dar un ejemplo
      jugador2.x = 100
jugador2.y = 20
      // Las del jugador 2, serán (100, 20)
      jugador1.Alto = 20
      jugador2.Alto = 30
      jugador1.Ancho = 20
      jugador2.Ancho = 40


      Colision=False
}


Función EntradayProcesamiento()
{
      Si (Usuario_aprieta_izquierda())
      {
             Jugador1.x = Jugador1.x Ð 1
      }
      Si (Usuario_aprieta_derecha())
      {
             Jugador1.x = Jugador1.x + 1
      }
      Si (Usuario_aprieta_arriba())
      {
             Jugador1.y = Jugador1.y Ð 1
      }
      Si (Usuario_aprieta_abajo())
      {
             Jugador1.y = Jugador1.y + 1
      }
      Colisión=DetectarColision(Jugador1, Jugador2)
}
Función DetectarColision(OBJETO Jugador1, OBJETO Jugador2) // Válida. Si no
acomoda, pasa los 6 argumentos (Radios, Coordenadas)
{
      Entero Dist1_x, Dist1_y // Almacenaran las distancias del centro del
primer cuadrado hasta ambos lados
      Entero Dist2_x, Dist2_y // Almacenaran las distancias del centro del
segundo cuadrado hasta ambos lados


      // Calculamos las distancias de los centros de cada cuadrado
      Dist1_x = Jugador1.Ancho / 2
      Dist1_y = Jugador1.Alto / 2


      Dist2_x = Jugador2.Ancho / 2
      Dist2_y = Jugador2.Alto / 2


      // Planteamos ambas condiciones
      Si( (Jugador2.x Ð Jugador1.x) <= ( Dist1_x + Dist2_x) Y (Jugador2.y Ð
      Jugador1.y) <= ( Dist1_y + Dist2_y)
      {
      //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_1, Jugador1.x, Jugador1.y)
      Dibujar_en_pantalla(IMAGEN_DEL_JUGAGOR_2, Jugador2.x, Jugador2.y)


      Si (Colisión == True)
      {
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()
      }
}

More Related Content

What's hot

Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05Juan Cardona
 
Electrónica digital: Tema 1 Sistemas combinaciones combinacionales
Electrónica digital: Tema 1 Sistemas combinaciones combinacionalesElectrónica digital: Tema 1 Sistemas combinaciones combinacionales
Electrónica digital: Tema 1 Sistemas combinaciones combinacionalesSANTIAGO PABLO ALBERTO
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoRobertho Mathias
 
Busqueda entre adversarios
Busqueda entre adversariosBusqueda entre adversarios
Busqueda entre adversariosgvnyps
 
Ecuaciones Diferenciales de Orden Superior
 Ecuaciones Diferenciales de Orden Superior Ecuaciones Diferenciales de Orden Superior
Ecuaciones Diferenciales de Orden SuperiorJoan Perez
 
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoA. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoPablo García y Colomé
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.jubacalo
 
Cap10 func exponencial
Cap10 func exponencialCap10 func exponencial
Cap10 func exponencialnivelacion008
 
Ejercicios resueltos mm 502
Ejercicios resueltos mm 502Ejercicios resueltos mm 502
Ejercicios resueltos mm 502Mario José
 
Modelamiento industrial
Modelamiento industrialModelamiento industrial
Modelamiento industrialfmejias
 
C ap15 circunferencia
C ap15 circunferenciaC ap15 circunferencia
C ap15 circunferencianivelacion008
 
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...Oscar Lopez
 

What's hot (18)

Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05
 
Electrónica digital: Tema 1 Sistemas combinaciones combinacionales
Electrónica digital: Tema 1 Sistemas combinaciones combinacionalesElectrónica digital: Tema 1 Sistemas combinaciones combinacionales
Electrónica digital: Tema 1 Sistemas combinaciones combinacionales
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupo
 
Busqueda entre adversarios
Busqueda entre adversariosBusqueda entre adversarios
Busqueda entre adversarios
 
Mat215
Mat215Mat215
Mat215
 
Terea 2 calculo
Terea 2 calculoTerea 2 calculo
Terea 2 calculo
 
Integral definida
Integral definidaIntegral definida
Integral definida
 
Ecuaciones Diferenciales de Orden Superior
 Ecuaciones Diferenciales de Orden Superior Ecuaciones Diferenciales de Orden Superior
Ecuaciones Diferenciales de Orden Superior
 
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoA. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 
Cap11 polinomiales
Cap11 polinomialesCap11 polinomiales
Cap11 polinomiales
 
Cap10 func exponencial
Cap10 func exponencialCap10 func exponencial
Cap10 func exponencial
 
Ejercicios resueltos mm 502
Ejercicios resueltos mm 502Ejercicios resueltos mm 502
Ejercicios resueltos mm 502
 
Cap 5 numeros
Cap 5 numerosCap 5 numeros
Cap 5 numeros
 
Modelamiento industrial
Modelamiento industrialModelamiento industrial
Modelamiento industrial
 
C ap15 circunferencia
C ap15 circunferenciaC ap15 circunferencia
C ap15 circunferencia
 
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
 
Problemas tema4
Problemas tema4Problemas tema4
Problemas tema4
 

Similar to Guía de programacion de videojuegos II

Guía de programación de videojuegos i
Guía de programación de videojuegos iGuía de programación de videojuegos i
Guía de programación de videojuegos iFreelance
 
SIMULACION EN MATLAB
SIMULACION EN MATLABSIMULACION EN MATLAB
SIMULACION EN MATLABorlandodiaz11
 
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacion
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacionApuntes metodos-numericos-aproximacion-funcional-e-interpolacion
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacionmiguelcasa
 
Calculo 1 Derivación
Calculo 1 DerivaciónCalculo 1 Derivación
Calculo 1 DerivaciónAndres Ayora
 
Clase 3 derivada
Clase 3 derivadaClase 3 derivada
Clase 3 derivadaZuly Ruiz
 
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.DianaJulia10
 
variables aleatorias (1)
 variables aleatorias (1) variables aleatorias (1)
variables aleatorias (1)yulyedelmira
 
Tema 9 variables aleatorias
Tema 9 variables aleatoriasTema 9 variables aleatorias
Tema 9 variables aleatoriasHuckFi
 
Apuntes maximos y_minimos
Apuntes maximos y_minimosApuntes maximos y_minimos
Apuntes maximos y_minimosAngel CaVa
 
Calculo diferencial fie.ppt
Calculo diferencial fie.pptCalculo diferencial fie.ppt
Calculo diferencial fie.pptTito Cedeño
 
FUNCIONES RACIONALES
FUNCIONES RACIONALESFUNCIONES RACIONALES
FUNCIONES RACIONALESCris Panchi
 
Sistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdfSistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdfjorge816356
 
Ejercicios detallados del obj 4 mat iii 733
Ejercicios detallados del obj 4 mat iii  733 Ejercicios detallados del obj 4 mat iii  733
Ejercicios detallados del obj 4 mat iii 733 Jonathan Mejías
 
Derivadas de funciones paramétricas
Derivadas de funciones paramétricas Derivadas de funciones paramétricas
Derivadas de funciones paramétricas Erick Guaman
 

Similar to Guía de programacion de videojuegos II (20)

Guía de programación de videojuegos i
Guía de programación de videojuegos iGuía de programación de videojuegos i
Guía de programación de videojuegos i
 
SIMULACION EN MATLAB
SIMULACION EN MATLABSIMULACION EN MATLAB
SIMULACION EN MATLAB
 
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacion
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacionApuntes metodos-numericos-aproximacion-funcional-e-interpolacion
Apuntes metodos-numericos-aproximacion-funcional-e-interpolacion
 
agentes
agentesagentes
agentes
 
Limites
LimitesLimites
Limites
 
Calculo 1 Derivación
Calculo 1 DerivaciónCalculo 1 Derivación
Calculo 1 Derivación
 
5ta
5ta5ta
5ta
 
Clase 3 derivada
Clase 3 derivadaClase 3 derivada
Clase 3 derivada
 
Diferencias parcial
Diferencias parcialDiferencias parcial
Diferencias parcial
 
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
 
Formulario antisismica maverick
Formulario antisismica maverickFormulario antisismica maverick
Formulario antisismica maverick
 
variables aleatorias (1)
 variables aleatorias (1) variables aleatorias (1)
variables aleatorias (1)
 
Tema 9 variables aleatorias
Tema 9 variables aleatoriasTema 9 variables aleatorias
Tema 9 variables aleatorias
 
Clase 11 b introducción a la derivada
Clase  11  b  introducción  a  la  derivadaClase  11  b  introducción  a  la  derivada
Clase 11 b introducción a la derivada
 
Apuntes maximos y_minimos
Apuntes maximos y_minimosApuntes maximos y_minimos
Apuntes maximos y_minimos
 
Calculo diferencial fie.ppt
Calculo diferencial fie.pptCalculo diferencial fie.ppt
Calculo diferencial fie.ppt
 
FUNCIONES RACIONALES
FUNCIONES RACIONALESFUNCIONES RACIONALES
FUNCIONES RACIONALES
 
Sistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdfSistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdf
 
Ejercicios detallados del obj 4 mat iii 733
Ejercicios detallados del obj 4 mat iii  733 Ejercicios detallados del obj 4 mat iii  733
Ejercicios detallados del obj 4 mat iii 733
 
Derivadas de funciones paramétricas
Derivadas de funciones paramétricas Derivadas de funciones paramétricas
Derivadas de funciones paramétricas
 

Recently uploaded

TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONALMiNeyi1
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.docRodneyFrankCUADROSMI
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosJonathanCovena1
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 

Recently uploaded (20)

TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 

Guía de programacion de videojuegos II

  • 1. Cpu 2 ai l to GI UA J td . e ui l s o c Po rmai d v e je o rga c n e i o u g s ó d J s In c Aa s oe g ai l o mo J v r eee R i a i L tlr u e i z
  • 2. 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 2 o más objetos en un 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é 2 sistemas de colisión: El primero basado en colisión circular, y el 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.
  • 3. a2 + b2 = c2 Donde a y b son los catetos, y c es la hipotenusa. Imaginemos que tenemos 2 puntos en un plano, uno con coordenadas ( x1 , y1 ) , el segundo con coordenadas ( x 2 , y 2 ) . 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 90º (definición del plano cartesiano). Si creamos un segmento 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 x 2 − x1 , y el segundo es y 2 − y1 ). Conociendo esto, podemos reemplazar la información en la fórmula original: ( x 2 − x1 ) 2 + ( y 2 − y1 ) 2 = dist 2 Donde dist es la distancia entre los 2 puntos. 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
  • 4. Por ejemplo, supongamos que tenemos 2 objetos circulares, uno de radio 5, y el otro de radio 3. Habrá colisión si la distancia de los centros de ambos objetos es 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 jugador1, jugador2 Función InicializarTodo() { jugador1.x = jugador1.y = 30 // las coordenadas del jugador 1 serán (30, 30), por dar un ejemplo jugador2.x = 100 jugador2.y = 20 // Las del jugador 2, serán (100, 20) jugador1.Radio = 5 jugador2.Radio = 3 Colision=False } Función EntradayProcesamiento() { Si (Usuario_aprieta_izquierda()) { Jugador1.x = Jugador1.x Ð 1 }
  • 5. Si (Usuario_aprieta_derecha()) { Jugador1.x = Jugador1.x + 1 } Si (Usuario_aprieta_arriba()) { Jugador1.y = Jugador1.y Ð 1 } Si (Usuario_aprieta_abajo()) { Jugador1.y = Jugador1.y + 1 } Colisión=DetectarColision(Jugador1, Jugador2) } Función DetectarColision(OBJETO Jugador1, OBJETO Jugador2) // Válida. Si no acomoda, pasa los 6 argumentos (Radios, Coordenadas) { Si ( ( (Jugador2.x-Jugador1.x)* (Jugador2.x-Jugador1.x) ) + ( (Jugador2.y- Jugador1.y)* (Jugador2.y-Jugador1.y) ) <= (Jugador1.Radio+Jugador2.Radio)*(Jugador1.Radio+Jugador2.Radio) ) { //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_1, Jugador1.x, Jugador1.y)
  • 6. Dibujar_en_pantalla(IMAGEN_DEL_JUGAGOR_2, Jugador2.x, Jugador2.y) 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 2 cuadrados en un plano, que no están colisionando. Al centro de cada cuadrado, hay un punto actúa como pivote central (es decir, la
  • 7. 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 2 condiciones: * 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 jugador1, jugador2 Función InicializarTodo() { jugador1.x = jugador1.y = 30 // las coordenadas del jugador 1 serán (30, 30), por dar un ejemplo jugador2.x = 100
  • 8. jugador2.y = 20 // Las del jugador 2, serán (100, 20) jugador1.Alto = 20 jugador2.Alto = 30 jugador1.Ancho = 20 jugador2.Ancho = 40 Colision=False } Función EntradayProcesamiento() { Si (Usuario_aprieta_izquierda()) { Jugador1.x = Jugador1.x Ð 1 } Si (Usuario_aprieta_derecha()) { Jugador1.x = Jugador1.x + 1 } Si (Usuario_aprieta_arriba()) { Jugador1.y = Jugador1.y Ð 1 } Si (Usuario_aprieta_abajo()) { Jugador1.y = Jugador1.y + 1 } Colisión=DetectarColision(Jugador1, Jugador2) } Función DetectarColision(OBJETO Jugador1, OBJETO Jugador2) // Válida. Si no acomoda, pasa los 6 argumentos (Radios, Coordenadas)
  • 9. { Entero Dist1_x, Dist1_y // Almacenaran las distancias del centro del primer cuadrado hasta ambos lados Entero Dist2_x, Dist2_y // Almacenaran las distancias del centro del segundo cuadrado hasta ambos lados // Calculamos las distancias de los centros de cada cuadrado Dist1_x = Jugador1.Ancho / 2 Dist1_y = Jugador1.Alto / 2 Dist2_x = Jugador2.Ancho / 2 Dist2_y = Jugador2.Alto / 2 // Planteamos ambas condiciones Si( (Jugador2.x Ð Jugador1.x) <= ( Dist1_x + Dist2_x) Y (Jugador2.y Ð Jugador1.y) <= ( Dist1_y + Dist2_y) { //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_1, Jugador1.x, Jugador1.y) Dibujar_en_pantalla(IMAGEN_DEL_JUGAGOR_2, Jugador2.x, Jugador2.y) Si (Colisión == True) {
  • 10. 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() } }