Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/07/2010, 17:06
dmzg10
 
Fecha de Ingreso: noviembre-2009
Mensajes: 10
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Ayuda con HitTest para juego de plataformas?

Hola!

Hace poco también hice un mini juego de plataformas pero lo hice en XNA, entonces te diré la lógica. La verdad es algo bastante sencillo:

La clave se encuentra en esta fórmula (obtenida de la ley de la conservación de la energía):

Vy = RAIZ(2gh)

(La velocidad en el eje "y" de un objeto será igual a la raíz cuadrada del duplo de la gravedad por la altura a la que se encuentre)

Pero hay un problema, ¿cómo carajos encuentras la gravedad de tu juego?, lo más práctico (y lo que hice) para conocerla es: tanteo. En cuanto tengas programado todo, ese tan famosísimo 9.8 lo aumentarás o disminuirás hasta que veas que tu objeto hace saltos factibles en tu escenario.

Si en tu "ciclo maestro del juego" al momento de incrementar la posición en "y" de tu objeto al momento de brincar le estás aumentando 3 pixeles por ejemplo (PosicionEnY = PosicionEnY + 3), vamos a hacer variable ese 3 para que si está el objeto llegando a la parte más alta de su salto no sea un 3 sino un 1 o 0.5 (esto hace ese tan especial "salto real").

Entonces, créate una variable "general" de velocidad en Y (supondré que ya la tienes), sustituyes el 3 por ella (PosicionEnY = PosicionEnY + VelocidadEnY), la inicializas en 0 para que el objeto no se mueva en Y hasta que le indiques el salto y cuando se active esa bandera aplicarás la fórmula ya mencionada:

<Suponiendo que tu constante mágica de gravedad fue 5>
if (brincar){
PosicionEnY = PosicionEnY - RAIZ(5 * ABSOLUTO(PosicionEnY - PosicionYDeTuPlataforma))
}

El valor absoluto es para evitar resultados negativos dentro de la raíz (al brincar, debido a que el y = 0 está en la parte superior y se incrementa conforme "bajamos", siempre darán Y's negativas). Una vez que obtienes el resultado de la fórmula (positivo) se lo restamos a la posición actual de tu objeto para que "suba".

Pregunta cualquier duda que te haya quedado.
Saludos!