Lenguaje Game Maker

GML
Información sobre la plantilla
CreadorMark Overmars
Lanzamiento inicial1999
Sistemas Operativos compatiblesMicrosoft Windows y Macintosh

Lenguaje Game Maker (GML por sus siglas en inglés) es un lenguaje de programación de scripts desarrollado para su uso en un software de creación de videojuegos llamado Game Maker. Fue creado originalmente por Mark Overmars para complementar el sistema de acción de arrastrar y soltar utilizado en Game Maker. Sin embargo, enlas últimas versiones, todas las acciones de arrastrar y soltar se basan en GML en lugar de ser separados de ella.

Es un lenguaje de programación interpretado muy flexible, su sintaxis se asemeja a la de C++, aunque también está influenciado por la sintaxis de otros lenguajes como Pascal. La estructura general del código GML puede tomar diferentes formas de sintaxis, ya que no está sujeta a una estricta como la de C. Es capaz de trabajar con números, cadenas de texto y demás de manera nativa.

Generalidades

Muchas de las características de Game Maker son accesibles a través de la interfaz de "arrastrar y soltar", pero GML amplía la funcionalidad al proporcionar funciones que no son utilizables a través de dicha interfaz, como las funciones de manejo de archivos, funciones de multijugador en línea y funciones para llamar DLLs externas.

En Game Maker, GML se usa en conjunto con el arrastrar y soltar. A menos que todo el proyecto está escrito en GML, los scripts no se pueden llamar sin acciones de arrastrar y soltar, pero todas las acciones de arrastrar y soltar también pueden escribirse en GML. La mayoría de los proyectos combinan el GML y las acciones de arrastrar y soltar, dependiendo de las preferencias del programador.

Sintáxis general

El lenguaje GML a nivel de sintáxis es similar a C++, pero consta de mucha flexibilidad por sus diversas variaciones de sintáxis.

Por ejemplo al trabajar con operadores puede funcionar igual de las siguientes formas:

  • x=x+1;
  • x+=1;

Además, el lenguaje no obliga al uso estricto del punto y coma (";") al final de cada línea, con lo que la sintáxis deja de ser tan estricta.

Funciones

El lenguaje ya tiene un gran número de funciones y sistemas implementados dentro de la misma aplicación en la que trabaja, por lo que no necesita de librerías externas como en otros lenguajes, aun así, también cabe la posibilidad de poder usar librerías externas en formato DLL para potenciar ciertos campos del sistema.

Variables

GML no necesita la declaración de las variables para trabajarlas, con solo asignarle un valor fijo una vez ya están activas. Ejemplo:

  • x=1;

En este caso, la variable ya está declarada y puede usarse de forma general, aunque, GML también incluye un bloque var imitando las declaraciones de variables de otros lenguajes. Se pueden declarar un sin número de variables en el programa sin necesidad de asignarles un valor (automáticamente es 0, como en C++). Por ejemplo:

  • var x,a,y;

Game Maker también soporta el uso de constantes, las cuales se pueden asignar desde una función del programa.

Dentro del código GML existen dos tipos de variables de trabajo, las variables locales y variables globales. Las variables locales trabajan solo dentro de un objeto, es decir, no existe fuera del objeto o bloque de código que la trabaje (así se permite usar el mismo nombre de la variable en otro objeto). Por otro lado están las variables globales, las cuales usan el prefijo global. antes del nombre de la variable, por ejemplo:

  • global.variable=10;

Las variables globales pueden ser usadas en cualquier parte del código del programa, por lo cual solo puede existir una sola variable global con el mismo nombre, y su valor puede verse afectado desde cualquier parámetro del código.

En GML, se definen dos tipos de variables locales:

  • Locales a una instancia.
  • Locales a un script (o cualquier otra pieza de código que tenga su propio contenedor).

Ser local a una instancia significa que esa variable está unida a esa instancia particular y que para ser llamada desde otra debe usarse como prefijo el nombre de la instancia que contiene la variable. Ser local a un script significa que la variable sólo puede ser usada en ese script y que al terminar de procesarse éste, la variable expira. El término "local" sin más especificaciones, usualmente se refiere a local a una instancia.

Por defecto, una variable es local de una instancia pero no local al script en el que es usada. Para hacer una variable accesible por todas las instancias y scripts, puede ser definida usando el prefijo global;

  • global.x=ok;

o declarada explícitamente

  • globalvar x,cx;

Mediante la primera forma, la variable debe ser llamada siempre usando el prefijo global.; la declaración con globalvar no requiere ningún prefijo. Para hacer una variable local a un script se usa la palabra clave var:

  • var x,cx;.

Se puede acceder a una variable que es local a una instancia desde otra instancia usando como prefijo un identificador de instancia *instancia.variable

No hay forma de acceder a una variable local de un script desde otro, a menos que la variable se pase de script en script como argumento.

Una instancia puede ejecutar código en otra instancia usando la sentencia with. Por ejemplo, el siguiente fragmento de código, colocado en un evento de colisión, puede ser usado para destruir a la instancia que colisiona con la actual. Cuando se ejecuta un evento de colisión, Game Maker automáticamente crea la variable otra, la cual se refiere a la instancia envuelta en la colisión.

  • with (otra) {instance_destroy();}

Cuando una variable es local a un script, ésta es independiente de toda instancia. El siguiente código funcionaría aunque la variable x no está definida en OtraInstancia.

var x; x="ok"; with (OtraInstancia) {show_message(x);}

Arreglos

En GML también se puede trabajar con arreglos, de manera similar a C++. Se declaran de la siguiente forma:

  • array[índice1,índice2];

Las arrays en Game Maker pueden ser de una o dos dimensiones y pueden contener una mezcla de cadenas y de valores reales, pero no otros arreglos. Existe un límite en los tamaños: los índices deben estar entre 0 y 32.000 y no puede haber más de 1.000.000 de valores en un mismo arreglo.

GML también tiene funciones utilizadas para crear y editar seis estructuras de datos simples. Estas funciones sólo están disponibles para los usuarios que tengan la versión Pro de Game Maker. Las estructuras de datos son Pilas, Colas, Listas, Mapas, Colas con prioridad y Grids.

Tipos

Al no ser un lenguaje tan complejo, GML sólo tiene dos tipos de variables. Una variable puede llevar cualquier tipo de datos sin ningún tipo de declaración. Los tipos de datos son:

  • Strings: cadenas de caracteres ASCIIUnicode y ANSI en caso de GM 8.1) que pueden tener cualquier longitud. Como Game Maker prefija el tamaño de las strings como valores enteros de 4 bytes, una string en realidad no puede tener más de 4.294.967.296 caracteres. Si una string supera dicho número, son cortados desde el principio hasta que el número total de estos sea menor al límite. Pero, generalmente las strings son mucho más cortas.
  • Valores Reales: son números con signo de punto flotante, es decir que pueden ser números positivos o negativos y que pueden tener parte decimal. Desde la versión 6.1, Game Maker permite la representación de valores hexadecimales como reales en el código, si se preceden del carácter $. En la versión 6, el manejo de valores reales tenía un bug que provocaba errores de precisión al trabajar con valores reales altos. El bug también existe en las versiones 7 y 8, pero fue mitigado con más precisión.

Como GML no tiene valores booleanos, las sentencias que requieren valores booleanos (como if) evaluarán cualquier valor real mayor que 0.5 como verdadero y cualquier valor real menor o igual a 0.5 como falso. También existen las constantes por defecto true y false que equivalen a 1 y 0 respectivamente..

Fuentes

  • Artículo Game Maker Language. Disponible en: "wiki.yoyogames.com". Consultado, 27 de octubre de 2012.
  • Artículo Game Maker Language. Disponible en: "wikipedia.org". Consultado, 27 de octubre de 2012.