GMS2: Ds_grid – lo básico

Introducción:

DS_grid es básicamente un tipo de array de 2 dimensiones, pero con algunas funciones extras bastante beneficiosas. Puede ser útil para la creación de inventarios complejos, maquina de estados, IAs de movimientos y más!.

nota:

Los datos que alberga pueden ser números o cadenas de texto.

Como podemos ver «ds_grid» se divide en coordenadas «X» e «Y», de esta forma podemos recordar las posiciones dadas y buscar nuestros datos albergados .

Como crear un ds_grid:

Vamos a crear nuestro primer «ds_grid» para ellos creamos un objeto nuevo nos vamos a evento créate:

 //EVENT CREATE
 Creamos una variable local con el valor del tamaño del grid que queramos

 var _size_grid = 8

 // Aquí creamos la “Grid” ,Asignándola a una variable “myGrid”
 myGrid = ds_grid_create(_size_grid ,_size_grid )

 

El primer valor de la función ds_grid_create(w,h) representa el ancho, y el segundo valor, el alto. En este ejemplo he usado ambos valores iguales para la grid.

Asignar valores a las posiciones:

Para asignar valores a cada posición tenemos esta función  ds_grid_set(index,x,y,valor) o también “accessor” grid_index[# posx,posy] = “valor”, de cualquiera de las dos formas podremos seleccionar una posición dentro del grid y añadirle un valor.

Seguiremos en el mismo evento y añadiremos un valor “aleatorio” a cada posición.

 // EVENT CREATE

 var gx = 0;
 var gy = 0;

 repeat (ds_grid_width(myGrid))
    {
    repeat (ds_grid_height(myGrid))
       {
       ds_grid_set(myGrid, gx, gy, irandom(1));
       gy += 1;
       }
    gy = 0;
    gx += 1;
 }

Este pequeño código le asignará un valor “aleatorio”(0 o 1, gracias a irandom)  a cada posición.

El primer ciclo Repeat, repetirá 8 veces, ya que el “ancho” del grid es 8 (recuerden el tamaño del grid). El segundo ciclo repeat, repetirá 8 veces ya que tenemos asignado el mismo tamaño de largo y ancho.Además colocará el valor aleatorio en la posición «gy» y «gx» ,por ultimo agregará +1 a la variable local gy.Al final, volviendo al  primer “ciclo repeat” aumentará la variable gx +1 y restablecerá la variable gy a 0

Esto funciona así:

Entra en el primer bucle, inmediatamente entra al segundo, el segundo se repetirá 8 veces, logrando asignarle un valor distinto a la primera fila, luego saldrá al primer repeat, el cual terminará restableciendo  gy = 0 y aumentando en 1 la posición gx. Esa seria la primera vuelta del primer repeat, hasta un total de 8, abarcando todas las posiciones.

Destruyendo el DS_GRID

Es recomendable siempre al terminar de usar una grid, este sea destruido(de lo contrario habrá crasheos o problemas al iniciar el juego). Para ello nos vamos al evento “CLEAN” y colocamos la función ds_grid_destroy():  

 //EVENT CLEAN o EVENT DESTROY

 ds_grid_destroy(myGrid); 

Dibujando nuestro DS_GRID

Por ultimo vamos a probar como queda, “dibujando” los datos que hemos creado en pantalla. Para ello vamos a evento “DRAW” ,Y colocamos algo parecido a lo que acabamos de hacer con los ciclos repeats.

 // EVENT DRAW

 var gx = 0;
 var gy = 0;

 repeat (ds_grid_width(myGrid))
    {
    repeat (ds_grid_height(myGrid))
       {
          var _valor = ds_grid_get(myGrid,gx, gy);  
          draw_text(x+16gx,y+16gy,_valor)
       gy += 1;
   }
 gy = 0;
    gx += 1;
 }

Con una pequeña diferencia.

Acá guardamos el valor de la posición en una variable local llamada «_valor» (puede tener cualquier nombre.

 var c = ds_grid_get(myGrid,gx, gy); 

draw_text(x+16*gx,y+16*gy,c)

El resultado será el siguiente:

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Blog de WordPress.com.

Subir ↑

A %d blogueros les gusta esto: