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