Ver Mensaje Individual
  #9  
Antiguo 21-11-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Hola j_flores3000,
Veo en otro hilo que pides ayuda. El tema lo puedes Y DEBES seguir tratando aquí ¿Porqué no pasaste por aqui y preguntaste?
¿Entendiste mi ejemplo? ¿Es demasiado complicado?

¿Porque no te tomas el tiempo suficiente para explicarte? Brindanos la mayor cantidad de información posible. ¿Lograste avanzar el algo? ¿Que estuviste probando?

Si no veo interés de tu parte por querer explicarte no creo que lleguemos a comprenderte.

La colisión se produce cuando dos (o más) elementos se chocan. O dicho de otro modo cuando desean ocupar una misma posición. Independientemente de si al menos uno de los objetos que intervienen en la colisión es inmovil, la colisión se cumple en base una condición:
La posición X e Y de en todo o parte de un objeto A es la misma posición X e Y de en todo o parte de un objeto B.

Por ejemplo un objeto A tiene un tamaño de 30x10, que está en posición [0,30] y un objeto B de tamaño 20x10 está en la posición [10,30] ¿Colisionan?
SI. Porque el objeto A ocupa las coordenadas [0,30], [30,10], [0,40] y [30,40] y el objeto B ocupa las coordenadas [10,30], [30,30], [10,40] y [30,40] Se observa que el objeto B invade casi la totalidad del objeto A, de hecho la única zona libre de A es la parte izquierda.
¿Como se obtienen estas coordenadas?
Sabiendo el largo y Alto de un objeto y la coordenada respecto a la posición de origen.

Las propiedades Left y Top del TImage, o de cualquier control ubican a dicho elemento respecto al origen del form. El eje y está invertido, en vez de subir (como el cartesiano), va bajando. La idea es que sabiendo su posición y su ancho se puede determinar cualquiera punto de sus esquinas:

Coordenada_Largo_x = Left + width
Coordenada_Alto_y = Top + Height

Entonces habrá colisión entre dos objetos (en este caso simple) cuando las coordenadas entre el largo y el ancho de los objetos sean concidentes. esto puede verse en el código que te expongo:

Código Delphi [-]
((ImgMisil.Left + ImgMisil.Width) >= ImgEnemigo.Left) AND
    ((ImgMisil.Top >= ImgEnemigo.Top) AND
    ((ImgMisil.Top + ImgMisil.Height) <=
    (ImgEnemigo.Top + ImgEnemigo.Height)))

La explicación es como sigue:
Código Delphi [-]
((ImgMisil.Left + ImgMisil.Width) >= ImgEnemigo.Left)
Verifico que la posición x del enemigo esté comprendida en la coordenada_largo_x del misil. Es decir si hay colisión sobre el EJE X
Código Delphi [-]
((ImgMisil.Top >= ImgEnemigo.Top)
Verifico que la posición y del enemigo esté comprendida en la posición y del misil. Es decir si hay colisión sobre el EJE Y

Código Delphi [-]
((ImgMisil.Top + ImgMisil.Height) <=
(ImgEnemigo.Top + ImgEnemigo.Height)))
Me aseguro que el alto del misil (coordenada_alto_y) sea coincidente con el alto del enemigo (coordenada_alto_y). La condición anterior es NECESESARIA pero no suficiente. Ya que puede darse el caso de que el misil haya pasado por debajo del enemigo.

Mi código puede mejorarse, seguro que si. No es el más bello... pero la idea y mi intensión no es de llenarte de código y de comentarios. Sino forzarte a ver el problema desde el punto de la lógica (es a propósito la ausencia de comentarios), que tu logres ver al problema no como una necesidad de programación y centrado en el código. Si te ha costado más de lo normal, mis disculpas. No medí la dificultad del problema.

Tu problema no es de codificación sino de lógica. Los juegos tienen más de lógica y matemática que cualquier otra cosa. Y Sabiendo que te estas iniciando, te recomiendo que entrenes y practiques más sobre este aspecto y no tanto en el código. La mayoría de los ejercicios que te darán en clases tienen mucho de lógica, algoritmos matemáticos... la idea no es aprenderse un lenguaje en produndidad, sino entrenar al cerebro a pensar abstractamente, comprender el problema y encontrar la manera de representarlo en la programación.

Considero que si te explicas bien te podremos ser de ayuda. No se de que otro modo explicarte cuando hay colisión. Si no me entiendes... disculpa, a veces no me se explicar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita