Me gustaría ver como se aplica (o en que es bueno aplicarlo) un ciclo for en GM. Osea, para que se suelen utilizar en un vídeojuego. Gracias!
Buenas Jangse.
Los ciclos for son muy útiles cuando tienes que repetir cierta información de manera escalonada. Yo, por ejemplo, siempre uso for a la hora de dibujar las vidas en el HUD. Es decir, el jugador tiene 3 vidas y por lo tanto quiero mostrar 3 corazones en pantalla, podría hacerse algo así:
[gml]
//Supongamos que tienes una variable global llamada "vidas", donde almacenas la vida del jugador.
for (i=0; i<global.vidas; i+=1)
{
//Aquí dibujas tu sprite "corazon"
draw_sprite(sprCorazon,0,i*32,0);
}
[/gml]
Así, si tienes 3 vidas, este ciclo for dibujará tres corazones.
Este es un ejemplo práctico pero el for se usa en infinidad de ocasiones: inventarios, menús, HUD...
El nombre real es "Bucle For".
En programación, lo bucles son bloques (segmentos) de códigos que se repiten según una condición dada. En los lenguajes de programación se pueden encontrar varios tipos de bucles, el comportamiento de cada bucle es en esencia el mismo, lo que cambia es la condición que hace que el bucle se repita o se "rompa".
La condición del bucle for es algo así:
FOR (variable=valor_inicial; mientras la variable cumpla una condición; la variable tendrá un valor de...)
O sea que la condición del bucle for requiere una variable que empiece con un valor determinado, una condición de la variable que se debe cumplir para que el bucle continúe, y un cambio en el valor de la variable por cada vez que se repita el bucle.
Es complicado explicarlo en lenguaje humano cuando se lleva tiempo haciéndolo en un lenguaje de computadora :-[
Con el ejemplo de Daz
//Supongamos que tienes una variable global llamada "vidas", donde almacenas la vida del jugador.
for (i=0; i<global.vidas; i+=1)
{
//Aquí dibujas tu sprite "corazon"
draw_sprite(sprCorazon,0,i*32,0);
}
i=0 equivale a variable=valor_inicial; o sea que la variable i tendrá un valor inicial de 0.
i<global.vidas equivale a "mientras la variable cumpla una condición", en este caso la condición es que la variable i sea menor a global.vidas.
i+=1 equivale a "la variable tendrá un valor de..."; o sea que cada que se repite el bucle for, la variable i aumenta en 1.
La cosa funcionaría de la siguiente manera.
->Primero, la variable i tiene valor 0 (en la primera vez que se ejecuta el bucle).
->Luego se pregunta si la condición se cumple, o sea que si i<global.vidas (Daz mencionó que global.vidas es igual a 3, por lo que por ahora sí se cumple la condición, 0<3).
->Al pasar por la condición, se ejecuta el código que está dentro del bloque del bucle, en este caso se ejecuta eso de
//Aquí dibujas tu sprite "corazon"
draw_sprite(sprCorazon,0,i*32,0);
->Al terminar de ejecutar el código, se le da el nuevo valor a la variable i; en este caso i+=1 indica que aumenta en 1...
->Se vuelve a repetir el bucle, ahora i ya vale 1.
->se pregunta la condición, i<global.vidas (1<3).
->Como se cumplió la condición, se vuelve a ejecutar el código del bucle:
//Aquí dibujas tu sprite "corazon"
draw_sprite(sprCorazon,0,i*32,0);
->Se vuelve a dar el nuevo valor a i; i+=1, i vuelve a aumentar en 1.
->Se vuelve a repetir el bucle, ahora i vale 2.
->Se pregunta la condición, i<global.vidas (2<3).
->Como se cumplió la condición, se vuelve a ejecutar el código del bucle:
//Aquí dibujas tu sprite "corazon"
draw_sprite(sprCorazon,0,i*32,0);
->Se vuelve a dar el nuevo valor a i; i+=1, i vuelve a aumentar en 1.
->Se vuelve a repetir el bucle, ahora i vale 3.
->Se pregunta la condición, i<global.vidas (3<3).
-> Ahora no se cumplió la condición, hasta aquí termina el bucle
Espero me haya explicado, necesito dormir XD
Muchas gracias knd144 y a Daz. A veces se ven ejemplos con for pero con operaciones que poco o nada tienen que ver con GM. Esta claro, que la aplicación es la misma. Pero viendo este bucle operando con un ejemplo en GM se pilla antes su uso. Se relaciona mas con su aplicación en un juego.
Por cierto knd144, muy bueno tu blog y el comic Sky Doll. Saludos!