¿O sea, que la animación de caminar del personaje, son solamente las subimágenes 0 y 1? ¿o todas las subimágenes del sprite forman la animación del personaje?
Te explico el código:
el sign(velocidadY) devuelve 0, 1 o -1 dependiendo de la dirección de la velocidad. Si la velocidad va hacia arriba (velocidadY negativa), devuelve -1. Si es hacia abajo (velocidadY positiva) devuelve 1... Cuando velocidadY es 0 el ciclo simplemente no se ejecuta.
Esto con el fin de ir comprobando pixel por pixel hacia abajo o hacia arriba (dependiendo de la velocidad), para evitar que el juegador se atasque en los sólidos, y después moverse pixel por pixel en dicha dirección gracias al ciclo.
El velocidadY += gravedadY es la aceleración, lo que mencioné arriba.
Por cierto, ten cuidado con la máscara de colisión del jugador. Hazla rectangular y pon las coordenadas del sprite justo en medio de ella.
Te explico el código:
Cita de: NiuWeb en Septiembre 11, 2017, 01:39:39 AMAquí simplemente declaro dos variables: velocidadY será la velocidad vertical, y gravedadY será la gravedad, es decir, una aceleración para velocidadY. Esto significa que cada fotograma se le sumará gravedadY a velocidadY.
[gml]
///Evento create
velocidadY = 0; //La velocidad de caída
gravedadY = 1; //La gravedad
[/gml]
Cita de: NiuWeb en Septiembre 11, 2017, 01:39:39 AMComencemos con el repeat: Éste es un ciclo, de la forma repeat(n){acciones;}. Permite ejecutar una serie de acciones en el mismo fotograma n veces.
[gml]
///Evento step
repeat(abs(velocidadY)) //Ciclo para comprobación pixel-perfect
{
if(place_free(x, y + sign(velocidadY))) //Si no hay nada un pixel abajo
y += sign(velocidadY); //Moverse un pixel
else //De lo contrario
{
velocidadY = 0; //Frenar velocidad
break; //Detener el ciclo
}
}
velocidadY += gravedadY; //Aceleración
[/gml]
el sign(velocidadY) devuelve 0, 1 o -1 dependiendo de la dirección de la velocidad. Si la velocidad va hacia arriba (velocidadY negativa), devuelve -1. Si es hacia abajo (velocidadY positiva) devuelve 1... Cuando velocidadY es 0 el ciclo simplemente no se ejecuta.
Esto con el fin de ir comprobando pixel por pixel hacia abajo o hacia arriba (dependiendo de la velocidad), para evitar que el juegador se atasque en los sólidos, y después moverse pixel por pixel en dicha dirección gracias al ciclo.
El velocidadY += gravedadY es la aceleración, lo que mencioné arriba.
Por cierto, ten cuidado con la máscara de colisión del jugador. Hazla rectangular y pon las coordenadas del sprite justo en medio de ella.