Variables en GML
Cuando programamos, es muy habitual usar variables. Ya vimos un poco cuando hablamos de expresiones y variables que eran las variables y qué datos podrían almacenar. Ahora entraremos en detalle.
Recordemos, una variable sirve para guardar información que podemos usar en cualquier momento. Para usar esta variable usaremos un nombre, y puede almacenar números o texto (también podemos referirnos a ellas para datos complejos, como sprites, objetos, instancias, fechas, etc.)
Como ya dijimos, para ponerle un nombre correcto a una variable no podemos usar caracteres especiales, excepto “_”, y no debe empezar por un número. Recordar también que Game Maker distingue mayúsculas y minúsculas, así que “max_bar” es una variable diferente de “Max_Bar”.
Nuestro primer código en GML
Vamos a abrir un proyecto que tengamos ya creado, nos vamos a un objeto cualquiera y en su evento Create añadimos una acción Execute code. Escribimos lo siguiente:
score = 0;
max_lifes = 4;
global.total_enemies = 0;
Ya tenemos nuestro primer código en GML. Lo único que hemos hecho es crear algunas variables y darles un valor. Pero en las tres variables que hemos hecho, cada una de ellas tienen una diferencia importante, y es el alcance o ámbito de la variable.
¿Qué es el alcance de una variable?
El alcance de una variable es dónde puede actuar esa variable. Lo habitual es que cuando creamos una variable, como por ejemplo max_lifes = 4, dónde se crea esa variable y se le da ese valor, es visible dentro del objeto. Para acceder a ella desde otro lugar, otro objeto, por ejemplo, habría que poner objeto.max_lifes. Este alcance se dice que es de instancia.
Variables de instancia o de objeto
Todas las variables que creamos sólo son accesibles dentro de ese objeto. Si creamos el objeto dos veces, cada instancia tendrá su propia variable, es decir, no la comparten. Así que es posible que siendo el mismo objeto, max_lifes tenga un valor diferente en cada instancia.
Variables del sistema
¿Y qué pasa con la variable score? Es una variable especial que ya viene con Game Maker Studio, así que no la podemos crear nosotros. Pero obviamente la podemos usar, y como su nombre indica, sirve para controlar una puntuación en nuestro juego.
Además, esta variable es de alcance global, es decir, da igual desde dónde se llame, cualquier objeto o script, que solo existirá una variable y su valor será el mismo en todos lados.
Por ejemplo, si desde un objeto añadimos 1 punto al score, y desde otro añadimos 5, la variable score tendrá de valor 6. No existirán dos variables score que valgan 1 y 5.
También existen variables de sistema que no son globales, pero ya las iremos viendo posteriormente.
Variables globales
¿Y nosotros podemos crear variables globales? Sí. En el código anterior tenemos un ejemplo
global.total_enemies = 0;
Al poner una variable el prefijo global. esa variable pasa a ser global, y desde cualquier objeto se puede llamar y modificar su valor. Solo existirá una variable total_enemies en todo nuestro juego.
Variables locales
Existe otro ámbito más reducido para nuestras variables, que es el ámbito local. Son variables temporales que solo son accesibles dentro del código que estamos ejecutando en ese momento. Para crearlas se pone la palabra especial var. Por ejemplo:
var tmp_xx;
var i=0;
Cuando ha acabado de ejecutarse el evento o el script se eliminan para que no ocupen memoria (al igual que una variable de instancia se elimina cuando se destruye el objeto).
Un ejemplo típico:
var xx, yy;
xx = x - 32 + irandom (64);
yy = y - 32 + irandom (64);
instance_create (xx, yy, obj_blood);
Esto sería lo mismo que escribir esto:
instance_create (x - 32 + irandom (64), y - 32 + irandom (64), obj_blood);
Pero se ve más claro de la primera manera usando variables temporales. Además, como habéis visto, también se pueden crear variables en la misma línea separándolas por comas.
Como usar las variables
Hemos visto hasta ahora como se van usando las variables dentro de un objeto, y como se usan cuando son globales. Vamos a ver otras opciones.
Hemos comentado que para usar las variables de otro objeto se puede poner el nombre del objeto separado con un punto y el nombre de la variable. Por ejemplo
obj_enemy.max_life++;
Pero también podemos usar una palabra especial de Game Maker, with. Esto sería equivalente:
with (obj_enemy) {
max_lifes++;
}
Todo lo que hay dentro de with se refiere a ese objeto, aunque lo estemos programando en otro.
También es posible dirigirte a una instancia y no a un objeto. Por ejemplo:
(100010).x = 35;
Cuando se crean instancias en una room, o las añadimos en el editor, tienen una numeración única. Si sabemos cual es esa numeración, nos podemos referir a una instancia en concreto, y no a un objeto.
Si no sabemos que número único de instancia es, podemos meter ese número en una variable y usarla de la misma manera. Por ejemplo:
enemy = instance_create(x, y, obj_boss);
enemy.speed = 5;
Aunque enemy sea una variable, y ésta almacena un número, ese número es el de la instancia y lo podemos usar tal y como hemos visto. También podemos usar la palabra with
enemy = instance_create(x, y, obj_boss);
with (enemy) {
speed = 5;
}
Conclusión
Hemos visto para qué sirven las variables, como crearlas, usarlas y lo más importante, desde dónde son accesibles gracias a su alcance. Acabaré el post con un trozo de código de varias declaraciones de variables de diferentes tipos de datos.
inventario = 12; //variable para ese objeto
health= 100; //variable de sistema
raza = ‘mago’; //texto
fuerza = 5.5; //número con decimales
armadura = -2; //número negativo
ando iniciando en este lenguaje y me a ayudado, gracias.