Abril 06, 2016, 07:32:02 PM Ultima modificación: Abril 09, 2016, 01:57:56 AM por carras
Hola chicos me gustaría hacer un juego sencillo. Un runner donde el player Salta de columna en columna. Hay dos botones de salto según el color de la columna. Mi pregunta es cual es la forma más sencilla de al pulsar el botón de salto este salte a la siguiente columna. Sabría cómo hacerlo pero siempre me complico con el código.

Se pueden usar las ecuaciones de movimiento parabólico para controlar el movimiento de esta forma
[gml]
x = xi + vx*t;
y = yi + vyi*t + g*t*t/2;
[/gml]
xi, yi es la posición cuando inicia el salto
vx es la velocidad horizontal (que es constante)
vyi es la velocidad vertical cuando inicia el salto
g es la gravedad
t es el tiempo (en steps)

Cuando se oprima el botón de salto, se debe guardar la posición inicial:
[gml]
xi = x; //x inicial
yi = y; //y inicial
[/gml]
Y de alguna forma se debe conocer la posición final. En el ejemplo que he adjuntado se busca el bloque que está próximo a la derecha, entonces se calculan las otras variables:
[gml]
if instance_exists( bs ){ //si hay bloque a la derecha
    xf = bs.x; //x final
    yf = bs.y - 32; //yfinal
   
    tt = (xf - xi)/vx; //tiempo total para el salto
    vyi = (yf - yi - g*tt*tt/2)/tt; //velocidad inicial de salto
   
    saltando = true; //activar salto
    t = 0; //tiempo actual
}
[/gml]
El tiempo total de salto es igual a la x final menos la x inicial, es decir, la distancia horizontal entre los dos bloques, que se divide entre la velocidad horizontal.
La velocidad vertical inicial se obtienen despejando la ecuación original y sustituyendo la variable t por el tiempo total.
Se activa la variable saltando y el tiempo transcurrido se hace igual a cero.

En el evento Step se actualiza la posición:
[gml]
if( saltando == true )
{
    t += 1; //incrementar tiempo
    if( t > tt ){ //si llega al limite
        t = tt; //limitar
        saltando = false; //termina salto
    }
    //formula de tiro parabolico
    x = xi + vx*t;
    y = yi + vyi*t + g*t*t/2;   
}
[/gml]

En el ejemplo adjunto se puede ver cómo funciona. Para saltar presiona ESPACIO.

Clamud, es genial y perfecto!!!! mejor no podria estar todo. Muchisimas gracias !!!!!!!! :D :D