Usar expresiones y variables en las acciones de Game Maker Studio
Hemos visto en el post anterior todas las acciones disponibles en Game Maker Studio, y con un simple arrastrar y soltar en el evento definido es suficiente para que nuestro objeto haga lo que nos interese. Los parámetros o propiedades de estas acciones suelen tener valores fijos, números o texto, pero a veces es insuficiente para lo que queremos hacer. Puede resultar necesario poner una fórmula o expresión para obtener un resultado que queremos.
Con Game Maker Studio es posible usar cualquier variable creada, constantes o variables globales (como las que comentamos de puntuación o vida) en cualquier acción que necesitemos. Podemos incluso añadir fórmulas matemáticas como las que vemos a continuación:
Por ejemplo: ¿cual es la diferencia entre estas dos acciones?
Ninguna, ya que tenemos una acción específica para la puntuación, y existe una variable de sistema llamada score que, a efectos prácticos, hace exactamente lo mismo. La única diferencia es que cuando veamos las acciones, nos sintamos cómodos para entender lo que hemos añadido al evento.
Variables del sistema
Hemos comentado que existen unas variables globales como score, lives o health que podemos usar para nuestros juegos. Estas variables de sistema son globales, es decir, se pueden utilizar en cualquier objeto y en cualquier momento que siempre modifican los mismos valores.
Pero existe una multitud de variables que están relacionadas con una instancia en concreto. Las variables de instancia tiene varias categorías: existen variables relacionadas con el movimiento, otras sobre las físicas que se pueden aplicar, variables relacionadas con los sprites e imágenes, paths asociados al objeto, etc… La modificación de los valores de estas variables afectarían sólo a esa instancia.
La lista de variables es bastante grande, y creo que enumerarlas aquí se haría bastante tedioso. Creo que lo mejor es hacer post con las categorías que hemos comentado y así vemos las diferentes opciones que podemos tener a la hora de gestionarlas.
Creación de variables
Aparte de todas las variables que nos ofrece Game Maker, existe la posibilidad de crear todas las variables que necesitemos. Es importante no usar el mismo nombre que las existentes en el sistema para no entrar en conflicto, ya que el programa no tendría muy claro a cual se refiere.
Ya tenemos una acción para crear variables, Set Variable, donde además le damos un valor. Cuando creamos una variable, esa variable se podrá usar en todos los eventos y en todas las acciones de ese objeto. Por ejemplo, si creamos la variable num_armas en en evento Create, ya podemos usarla en cualquier evento.
Crear variables globales
Imaginemos que creamos una variable que almacena el total de enemigos muertos que llevamos, la llamaremos total_enemigos. Si la creamos en un objeto, o le cambiamos su valor, esa variable estaría en cada objeto o instancia que tengamos (si tuvieramos 5 instancias, habría 5 variables diferentes, una en cada objeto), lo cual en este caso no nos interesa: queremos una variable que funcione de forma global.
Podemos crear una variable global de una forma muy sencilla, en vez de decir que se llama total_enemigos, pondremos global.total_enemigos. Al ponerlo de esta manera, ya no depende de un objeto, y se puede llamar desde cualquier lugar. Así podemos incrementar los enemigos que destruyamos sin ningún problema.
Al ser una variable global, se mantiene durante toda la partida, da igual que eliminemos objetos o cambiemos de room. Solo hay que asegurarse de crearla correctamente antes de que se utilice, con un objeto al principio de la room o al principio del juego.
Tipos de datos en las variables
Hemos comentado anteriormente que una variable puede ser un número, una frase, etc. A esto es lo que llamamos tipos de datos. Tenemos diferentes tipos de datos, algunos sencillos y otros más complejos:
- cadena o string: es un conjunto de carácteres, que para agruparlos utilizamos las comillas ‘’.
- número o real: los números almacenados siempre tienen decimales (aunque esos decimales valgan cero).
- boolean: ya lo hemos comentado. Podemos decir que solo se almacena un bit, o sea, solo puede tener valor 0 o 1. Esos valores son equivalentes a poner true o false, para tener una fácil interpretación.
- arrays: es un listado de valores (números o cadenas, por ejemplo) con un índice numérico para acceder. Hablaremos de arrays cuando toquemos el lenguaje GML.
Estos son los tipos de datos sencillos. Tenemos muchos tipos más, podemos gestionar fechas (aunque se almacenan como un número), tipos llamados enum, que son una lista de valores fijos (constantes), punteros, para gestionar buffers. También tenemos otros tipos de datos complejos que gestionan listas, colas, mapas, etc, que veremos en detalle próximamente.
Expresiones en acciones
Ya hemos visto que podemos usar tanto las variables de sistema como las que creemos en las acciones de nuestro juego. Podemos poner 100/3, pero también podemos usar variables creada y poner 100/total. Estas expresiones pueden ser todo lo complejas que queramos.
Cuando una variable es de un tipo, no podemos mezclarlos entre ellos, ya que dará un error de programa. Por ejemplo, si la variable nombre que tiene el valor Jugador, le decimos ahora que se incremente en 5, dará un error. Pero, ¿y si tenemos la variable global.total_enemigos y queremos mostrar el texto “Total de enemigos: 5”? Si en el evento Draw añadimos la acción Draw Text y ponemos el texto Total de enemigos global.total_enemigos mostrará eso tal cual. Si ponemos ‘Total de enemigos’ + global.total_enemigos, estamos mezclando una cadena con un número, lo cual no es correcto. Afortunadamente, todos los lenguajes de programación, y también Game Maker, tiene en cuenta este tipo de problemas y tenemos funciones y scripts que cambian estos tipos de datos. Lo correcto sería poner ‘Total de enemigos’ + string(global.total_enemigos). Vemos que al añadir la función string, le estamos diciendo que cambie un número a una cadena, lo cual sería correcto (recordad que podemos hacer esto ‘hola ’ + ‘mundo’, ya que sumar estas dos cadenas es juntarlas). Así que ahora hablaremos de las funciones brevemente.
Funciones en Game Maker Studio
Ya hemos visto que existen variables de sistema, pero también existen funciones de sistema. Estas funciones hacen un grupo de instrucciones, al igual que cuando añadimos acciones a un evento. Por ejemplo, la función string() hace las instrucciones necesarias para que cuando le pasemos un número transforme ese número en una cadena.
Es posible pasarle valores a una función, no es obligatorio, y se pasan dentro de los paréntesis que vemos. Ya hemos visto que en string() se le pasa la variable con el número, pero otra función de sistema es draw_text() y en ella se le pasan tres valores: la posición x, la posición y, y el texto que queremos mostrar. Por ejemplo draw_text (100, 150, ‘INVENTARIO’). También podemos poner draw_text (x – 50, y, ‘INVENTARIO’), y estaríamos usando variables del objeto, o globales, etc.
El listado de funciones es tan grande o más como el de variables del sistema, además que podemos crear nuestras propias funciones en el apartado de Scripts, pudiendo personalizar nuestras acciones como si fueran funciones globales que podemos usar en cualquier objeto.
Como podemos ver, las posibilidades que se nos ofrecen son infinitas, ¡y todavía no hemos tocado nada de código GML! En los próximos posts hablaremos de los recursos que nos faltan y empezamos ya con ejemplos de juegos reales que podemos hacer sin tener que programar nada.
quiero agregar una variable que aumente con cada click con una formula e introducir esa variable dentro de la acción change sprit que ya trae game maker y no puedo.
En Change Sprite solo podrías poner una variable en los campos subimage o speed. ¿Es eso lo que quieres haceR?