SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
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 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
 

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 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 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
 
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
 

Último

Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
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
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 

Último (20)

Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
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
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 

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