Haces muy bien en preguntar por que es cada cosa, si te limitas a copiar codigos de tutoriales nunca conseguiras sacar tu juego de cierto nivel de calidad, que no es tu caso por lo que veo :D
Bien, cuento con que sabes que es un bucle for y como se utiliza, no? le damos un peque?o repaso
for (i=0;i<10;i+=1){
show_message(string(i));
}
Bien las sentencias for tienen tres apartados separados por ";", el primer apartado se ejecuta solo una vez y al principio, normalmente lo usamos para declarar o inicializar la variable, en este casi y en la mayoria de for siempre se usa la i, que podria ser la j, o la variable "tulipan" sabes? xD
La sentencia, en este caso el show_message() que ves es lo que se ejecuta varias veces, siempre y cuando la condicion, que es el segundo apartado, se cumpla, al ejecutar la sentencia, se ejecuta el tercer apartado, asi quedaria el orden de acciones:
-se ejecuta primer apartado
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
-se cumple segundo apartado? SI (contimuanos), NO (termina el bucle)
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
...
normalmente se aprovecha el valor que va teniendo la variable, en este caso la i para usarla (en arrays, en multiplicaciones...)
en este caso lo aprovechamos para mandar a lo largo del bucle for 10 mensajes en orden cada uno con un numero del 0 al 9
Iendo al grano ese codigo que has puesto lo que hace es intentar subir una rampa hacia la izquierda con una inclinacion maxima de 8 pixels si no me equivoco, no?
Bien pues el for va del 0 al 8 ?Por que empieza por el 0 y acaba en el 8? Lo explicamos mas adelante
tenemos la funcion place_free(x,y), esta funcion lo que hace es devolvernos true (para que se cumpla el if) cuando la posicion que se le ha indicado dentro en coordenadas X e Y esta libre de objetos solidos
Entonces, en un primer ciclo del bucle for tendriamos la i a 0 y comprobariamos si en la posicion x-5 (5 pixeles a nuestra izquierda) y y-0 (a nuestra misma altura porque Y se queda igual) hay alguna pared solida, en caso de no haberla la funcion devolveria true, y se ejecutaria la sentencia de dentro del if que es aplicar el movimiento, al no haber nada en esa posicion trasladamos al personaje 5 pixeles a la izquierda y ninguno hacia arriba o abajo, y exit para no seguir comprobando por que ya hemos conseguido mover al personaje
?Que pasaria si no hubiera habido hueco en x-5,y-0 ?? El bucle habria continuado para seguir buscando hueco, en este caso i seria 1 en el ciclo siguiente, entonces se comprobaria si hay hueco en la posicion x-5,y-1 que es 5 a la izquierda y 1 por encima tuya, si hubiera hueco libre entonces el personaje subiria un poquito la rampa hacia arriba y se moveria hacia la izquierda, de ahi el efecto de que suba la rampa. Al haberle puesto una tolerancia de 8 podria hacer hasta 8 ciclos intentando buscar su hueco cada vez un poquitin mas arriba
Bien, cuento con que sabes que es un bucle for y como se utiliza, no? le damos un peque?o repaso
for (i=0;i<10;i+=1){
show_message(string(i));
}
Bien las sentencias for tienen tres apartados separados por ";", el primer apartado se ejecuta solo una vez y al principio, normalmente lo usamos para declarar o inicializar la variable, en este casi y en la mayoria de for siempre se usa la i, que podria ser la j, o la variable "tulipan" sabes? xD
La sentencia, en este caso el show_message() que ves es lo que se ejecuta varias veces, siempre y cuando la condicion, que es el segundo apartado, se cumpla, al ejecutar la sentencia, se ejecuta el tercer apartado, asi quedaria el orden de acciones:
-se ejecuta primer apartado
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
-se cumple segundo apartado? SI (contimuanos), NO (termina el bucle)
-sentencia
-se ejecuta tercer apartado
-se comprueba segundo apartado
...
normalmente se aprovecha el valor que va teniendo la variable, en este caso la i para usarla (en arrays, en multiplicaciones...)
en este caso lo aprovechamos para mandar a lo largo del bucle for 10 mensajes en orden cada uno con un numero del 0 al 9
Iendo al grano ese codigo que has puesto lo que hace es intentar subir una rampa hacia la izquierda con una inclinacion maxima de 8 pixels si no me equivoco, no?
Bien pues el for va del 0 al 8 ?Por que empieza por el 0 y acaba en el 8? Lo explicamos mas adelante
tenemos la funcion place_free(x,y), esta funcion lo que hace es devolvernos true (para que se cumpla el if) cuando la posicion que se le ha indicado dentro en coordenadas X e Y esta libre de objetos solidos
Entonces, en un primer ciclo del bucle for tendriamos la i a 0 y comprobariamos si en la posicion x-5 (5 pixeles a nuestra izquierda) y y-0 (a nuestra misma altura porque Y se queda igual) hay alguna pared solida, en caso de no haberla la funcion devolveria true, y se ejecutaria la sentencia de dentro del if que es aplicar el movimiento, al no haber nada en esa posicion trasladamos al personaje 5 pixeles a la izquierda y ninguno hacia arriba o abajo, y exit para no seguir comprobando por que ya hemos conseguido mover al personaje
?Que pasaria si no hubiera habido hueco en x-5,y-0 ?? El bucle habria continuado para seguir buscando hueco, en este caso i seria 1 en el ciclo siguiente, entonces se comprobaria si hay hueco en la posicion x-5,y-1 que es 5 a la izquierda y 1 por encima tuya, si hubiera hueco libre entonces el personaje subiria un poquito la rampa hacia arriba y se moveria hacia la izquierda, de ahi el efecto de que suba la rampa. Al haberle puesto una tolerancia de 8 podria hacer hasta 8 ciclos intentando buscar su hueco cada vez un poquitin mas arriba