SlideShare una empresa de Scribd logo
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()
      }
}

Más contenido relacionado

La actualidad más candente

Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05
Juan 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 combinacionales
SANTIAGO 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
 
Mat215
Mat215Mat215
Mat215
michimichu
 
Integral definida
Integral definidaIntegral definida
Integral definida
Hernán Bravo Muentes
 
Ecuaciones Diferenciales de Orden Superior
 Ecuaciones Diferenciales de Orden Superior Ecuaciones Diferenciales de Orden Superior
Ecuaciones Diferenciales de Orden Superior
Joan 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. Complemento
Pablo 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
 
Cap11 polinomiales
Cap11 polinomialesCap11 polinomiales
Cap11 polinomiales
nivelacion008
 
Cap10 func exponencial
Cap10 func exponencialCap10 func exponencial
Cap10 func exponencial
nivelacion008
 
Ejercicios resueltos mm 502
Ejercicios resueltos mm 502Ejercicios resueltos mm 502
Ejercicios resueltos mm 502Mario José
 
Cap 5 numeros
Cap 5 numerosCap 5 numeros
Cap 5 numeros
nivelacion008
 
Modelamiento industrial
Modelamiento industrialModelamiento industrial
Modelamiento industrialfmejias
 
C ap15 circunferencia
C ap15 circunferenciaC ap15 circunferencia
C ap15 circunferencia
nivelacion008
 
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
 
Problemas tema4
Problemas tema4Problemas tema4
Problemas tema4
Otto Carvajal
 

La actualidad más candente (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 a 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 i
Freelance
 
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-interpolacion
miguelcasa
 
Limites
LimitesLimites
Calculo 1 Derivación
Calculo 1 DerivaciónCalculo 1 Derivación
Calculo 1 Derivación
Andres Ayora
 
Clase 3 derivada
Clase 3 derivadaClase 3 derivada
Clase 3 derivada
Zuly Ruiz
 
Diferencias parcial
Diferencias parcialDiferencias parcial
Diferencias parcial
CristianMochcco
 
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
 
Formulario antisismica maverick
Formulario antisismica maverickFormulario antisismica maverick
Formulario antisismica maverick
Ysai Villanueva Gamarra
 
Tema 9 variables aleatorias
Tema 9 variables aleatoriasTema 9 variables aleatorias
Tema 9 variables aleatorias
HuckFi
 
variables aleatorias (1)
 variables aleatorias (1) variables aleatorias (1)
variables aleatorias (1)
yulyedelmira
 
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
NILO ALBERTO BENAVIDES SOLIS
 
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.ppt
Tito Cedeño
 
FUNCIONES RACIONALES
FUNCIONES RACIONALESFUNCIONES RACIONALES
FUNCIONES RACIONALES
Cris Panchi
 
Sistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdfSistema No Lineal_Print.pdf
Sistema No Lineal_Print.pdf
jorge816356
 
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
 
Derivada
DerivadaDerivada

Similar a 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
 
Tema 9 variables aleatorias
Tema 9 variables aleatoriasTema 9 variables aleatorias
Tema 9 variables aleatorias
 
variables aleatorias (1)
 variables aleatorias (1) variables aleatorias (1)
variables aleatorias (1)
 
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
 
Derivada
DerivadaDerivada
Derivada
 

Último

Sesión: El fundamento del gobierno de Dios.pdf
Sesión: El fundamento del gobierno de Dios.pdfSesión: El fundamento del gobierno de Dios.pdf
Sesión: El fundamento del gobierno de Dios.pdf
https://gramadal.wordpress.com/
 
Fase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcionalFase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcional
YasneidyGonzalez
 
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
pablomarin116
 
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
JAVIER SOLIS NOYOLA
 
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docxENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
SandraPiza2
 
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptxAutomatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
GallardoJahse
 
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdfTestimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Txema Gs
 
corpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdfcorpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdf
YolandaRodriguezChin
 
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNETPRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
CESAR MIJAEL ESPINOZA SALAZAR
 
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
FelixCamachoGuzman
 
Introducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BIIntroducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BI
arleyo2006
 
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptxCLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
LilianaRivera778668
 
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernándezPRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
Ruben53283
 
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdfTexto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
ClaudiaAlcondeViadez
 
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de MadridHorarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
20minutos
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Monseespinoza6
 
Fase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometricoFase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometrico
YasneidyGonzalez
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
LorenaCovarrubias12
 
El lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libroEl lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libro
Distea V región
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
Edurne Navarro Bueno
 

Último (20)

Sesión: El fundamento del gobierno de Dios.pdf
Sesión: El fundamento del gobierno de Dios.pdfSesión: El fundamento del gobierno de Dios.pdf
Sesión: El fundamento del gobierno de Dios.pdf
 
Fase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcionalFase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcional
 
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.Friedrich Nietzsche. Presentación de 2 de Bachillerato.
Friedrich Nietzsche. Presentación de 2 de Bachillerato.
 
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...
 
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docxENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
 
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptxAutomatización de proceso de producción de la empresa Gloria SA (1).pptx
Automatización de proceso de producción de la empresa Gloria SA (1).pptx
 
Testimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdfTestimonio Paco Z PATRONATO_Valencia_24.pdf
Testimonio Paco Z PATRONATO_Valencia_24.pdf
 
corpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdfcorpus-christi-sesion-de-aprendizaje.pdf
corpus-christi-sesion-de-aprendizaje.pdf
 
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNETPRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
 
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx1º GRADO CONCLUSIONES DESCRIPTIVAS  PRIMARIA.docx
1º GRADO CONCLUSIONES DESCRIPTIVAS PRIMARIA.docx
 
Introducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BIIntroducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BI
 
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptxCLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
CLASE N.1 ANÁLISIS ADMINISTRATIVO EMPRESARIAL presentación.pptx
 
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernándezPRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
PRÁCTICAS PEDAGOGÍA.pdf_Educación Y Sociedad_AnaFernández
 
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdfTexto_de_Aprendizaje-1ro_secundaria-2024.pdf
Texto_de_Aprendizaje-1ro_secundaria-2024.pdf
 
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de MadridHorarios Exámenes EVAU Ordinaria 2024 de Madrid
Horarios Exámenes EVAU Ordinaria 2024 de Madrid
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
 
Fase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometricoFase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometrico
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
 
El lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libroEl lugar mas bonito del mundo resumen del libro
El lugar mas bonito del mundo resumen del libro
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
 

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() } }