Tengo muchas dudas sobre como utilizar correctamente el ciclo for, ¿Cual es su intención en el code? ¿Que es lo máximo que puedo llegar a utilizarlos?, mejor dicho ¿como los puedo sacar el mayo provecho? ¿Alguien me podría instruir de como debo de llevar un inventario con arrays y ciclos for? Lo agradecería mucho de ante mano.

Saludos,
Cordialmente Jodidox!

El bucle for es un bucle que tiene la característica de que se le puede asignar de una forma fácil la cantidad de veces que queres que se repita definiendole condiciones. Más o menos para que te des una idea lo podes analizar de esta forma: "Iniciar en X valor; Comprobar que el valor esté dentro de la condición; Incrementar/Decrementar el valor".

Este bucle se utiliza bastante, es muy utilizado para recorrer vectores ya que en la condición se le asigna como límite el tamaño del vector. También se utiliza como retardo haciendo un bucle bastante grande, ésta función la he utilizado en C, C++, Java y JavaScript, en GM no es necesario ya que se cuenta con alarmas.

Para sacarle el mayor provecho a este bucle tenes que saber que es lo que queres realizar, por ejemplo, podes usar dos bucles for anidados para recorrer una matriz, el primero representa las filas y el segundo representa las columnas:

[gml]
for (i=0;i<10;i++) {
    for (j=0;j<10;j++) {
         matriz[j] = 0;
    }
}
[/gml]

En ese ejemplo se utilizan dos bucles for anidados para inicializar una matriz de 10x10 en 0.

En cuanto al tema de un inventario, simplemente tenes que ver el inventario como una matriz, tenes que considerar cada posición del inventario como una posición de la matriz. Es decir, podes tener el objetoA en inventario[0][0], el objetoB en inventario[0][1] y así sucesivamente hasta completar todas las posiciones de memoria. En el caso de agregar un objeto tendrías que comprobar que la posición esté vacía, para ello basta con corroborar la posición en la que lo vas a agregar, si la posición está ocupada (podrías usar "empty" para las posiciones vacías y el nombre del objeto para las posiciones ocupadas) comprobás la siguiente posición, para ello es necesario el bucle for.

!Vaya! Bastante técnico Iros. Pero, sinceramente, no entendí de a mucho. Supongamos que ya tengo asignado cada sprite del inventario, ¿Es posible utilizar solo un objeto para que lea cada uno de los sprites?, ¿y como comprueba que se vayan sumando al array?

Cordialmente Jodidox!

Si es posible, en el evento Draw haces los dos for anidados para dibujar los objetos quedándote algo así:

[gml]
for (i=0;i<10;i++) {
    for (j=0;j<10;j++) {
         if (inventario[j] != "empty")
             draw_sprite(inventario[j].sprite_index,0,j*32,i*32);
    }
}
[/gml]

Lo que hace es, mediante el valor almacenado en la matriz, comprueba si no está vacío y dibuja el sprite del objeto en la posición "i","j" del inventario en la posición j*32, i*32 de la pantalla. Es decir, en un primer instante como el valor de i y j es 0 va a multiplicar 32 * 0 dando 0, es decir que lo posicionaría al principio de la pantalla. Eso lo podes ir regulando como quieras que se dibuje tu inventario, también podes hacer que se dibuje con respecto a un objeto haciendo objetoInventario.x+(j*32),objetoInventario.y+(i*32).

Te dejo un proyecto que estoy haciendo donde utilizo una matriz y muestro la posición por donde paso el cursor:

https://www.dropbox.com/s/s0roesrddysqhqd/pTubo.gmz?dl=0