Sunteți pe pagina 1din 18

GML

Game Maker Language


Game Maker Languaje (GML) es un lenguaje de programacin interpretado (aunque con el
uso de YoYoCompiler puede ser compilado) desarrollado para usarse como complemento de
la aplicacin de desarrollo de juegos Game Maker. El lenguaje es utilizado en el programa
para dar mayor potenciacin al desarrollo de juegos u otros sistemas dentro de tal. El lenguaje
fue codificado usando los lenguajes Delphi y C++.
Es un lenguaje de programacin muy flexible, basado en C++, aunque tambin se ve
influenciado por la sintaxis de otros lenguajes como Pascal. La estructura general del cdigo
GML puede tomar diferentes formas de sintaxis, ya que no se ve sujeta a una sintaxis estricta
como la de C. Es capaz de trabajar con nmeros, cadenas de texto y dems de manera
nativa.

ndice
[ocultar]

1Sintaxis general
o 1.1Funciones
o 1.2Variables
1.2.1Tipos
1.2.2Alcance

Sintaxis general[editar]
El lenguaje GML a nivel de sintaxis es similar a C++, aun as, este lenguaje constata de
mucha flexibilidad debido a sus diversas variaciones de sintaxis (las cuales son todas vlidas).
Por ejemplo, al trabajar con operadores puede funcionar as:

g=g+1;

Pero en GML tambin es vlido de esta forma:

g+=1;

Esta regla de operadores tambin se puede aplicar en /= , -= y *= .


El lenguaje GML adems, no obliga el uso reglamentario del smbolo ";" al final de cada lnea
o funcin, lo cual le hace flexible en el aspecto estricto de la sintaxis.
Funciones[editar]
El lenguaje GML por entender ya tiene un gran nmero de funciones y sistemas
implementados dentro del mismo programa en el que trabaja, es decir, no necesita de libreras
externas como en otros lenguajes (C++ por ejemplo), aun as, tambin cabe la posibilidad de
poder usar libreras externas para potenciar ciertos campos del sistema. Estas libreras
debern estar en un formato u otro dependiendo de con que plataforma estemos trabajando,
como DLL para Windows y .java para Android
Variables[editar]
GML no necesita de la declaracin compulsiva de variables para trabajarlas, es decir, basta
con asignarle un valor fijo una vez en cualquier sitio. Por ejemplo:

variable=<valor>;

En este caso, la variable ya est declarada y puede usarse de forma general, aun as, GML
tambin incluye un bloque "var" imitando las declaraciones de variables de otros lenguajes,
pudiendo declarar un sin nmero de variables en el programa sin necesidad de asignarles un
valor (si no que este automticamente es 0 ). Por ejemplo:

var xx,yy,ss;

Game Maker tambin trabaja con constantes, las cuales se pueden asignar desde una funcin
del programa (ms las que ya existen por ende).
Dentro del cdigo GML existen dos tipos de variables de trabajo, las variables
locales y variables globales. Las variables locales trabajan nicamente dentro de un
"objeto", es decir, no es existente fuera del "objeto" o bloque de cdigo(en caso de haber sido
declaradas con "var") que la trabaje (lo cual permite usar el mismo nombre de la variable en
otro objeto). Por otro lado estn las variables globales, las cuales usan el
prefijo global. antes del nombre de la variable, por ejemplo:

global.variable=0;

Las variables globales tienen uso en todo el programa, por lo cual solo puede existir una sola
variable global con el mismo nombre, y su valor puede verse afectado desde cualquier
parmetro del programa/cdigo.
GML tambin puede manejar arrays de manera muy simple y muy similar a C++.
Deben ser declaradas de la forma:

array[ndice1,ndice2];

Las arrays en Game Maker pueden ser de 1 o 2 dimensiones y pueden contener una mezcla
de strings y de valores reales, pero no otras arrays. Tambin existe un lmite en los tamaos:
Los ndices deben estar entre 0 y 32.000 y no puede haber ms de 1.000.000 valores en una
misma array.
GML tambin cuenta con funciones utilizadas para crear y editar seis estructuras de datos
simples. Estas funciones slo estn disponibles para los usuarios que tienen la versin Pro de
Game Maker. Las estructuras de datos disponibles son Stacks, Queues, Listas, Mapas,
Queues de prioridad, y Grids.
Tipos[editar]
Por la simplicidad del GML, este slo tiene dos tipos de variables. Cualquier variable puede
llevar cualquier tipo de datos sin ningn tipo de declaracin.
Strings Son cadenas de caracteres ASCII ( Unicode y ANSI en caso de GM 8.1) que
pueden tener cualquier longitud. Como GM prefija el tamao de las strings como valores
enteros de 4 bytes, una string en realidad no puede tener ms de 4,294,967,296
caracteres, si se supera dicho nmero, los caracteres son cortados desde el principio
hasta que el nmero total de estos sea menor al lmite. Sin embargo, generalmente las
strings son muchsimo ms cortas.

ty_string

Boolean Son para distinguir un caracter de tipo true o tipo false, no almacena ningn valor

Valores Reales Son nmeros con signo de punto flotante. Eso quiere decir que pueden
ser nmeros positivos o negativos y que pueden tener parte decimal. Desde la versin 6.1,
GM permite la representacin de valores hexadecimales como reales en el cdigo, si se
preceden del carcter $. En la versin 6, el manejo de valores reales tena un bug que
provocaba errores de precisin al trabajar con valores reales altos. El bug tambin existe
en GM 7 y 8, pero fue mitigado con ms precisin.

ty_real

Como GML no tiene valores booleanos, sentencias que requieren valores booleanos (como if)
evaluarn cualquier valor real mayor que 0.5 como verdadero y cualquier valor real menor o
igual a 0.5 como falso. En GML tambin existen las constantes por
defecto true y false que equivalen a 1 y 0 respectivamente, y pueden ser usadas para
hacer el cdigo ms legible.
Alcance[editar]
En GML, hay dos tipos de variables locales: locales a una "instancia", y locales a un "script" (o
cualquier otra pieza de cdigo 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 instancia debe usarse como prefijo el nombre de la instancia que contiene la variable. Ser
local a un script significa que la variable slo puede ser usada en ese script y que al terminar
de procesarse ste, la variable expira. El trmino "local" sin ms 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.foo=bar; o declarada explcitamente globalvar
foo,bar; . Usando la primera forma, la variable debe siempre ser llamada usando el
prefijo global. ; la declaracin con globalvar no requiere ningn prefijo. Para hacer una
variable local a un script se usa la palabra clave var : var foo,bar; .
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 cdigo en otra instancia usando la sentencia "with". Por ejemplo,
la siguiente pieza de cdigo, colocada en un evento de colisin, puede ser usada para destruir
a la instancia que colisiona con la actual. Cuando se ejecuta un evento de colisin, Game
Maker automticamente crea la variable "other", la cual se refiere a la instancia envuelta en la
colisin.

with (other) {instance_destroy();}

Ntese que cuando una variable es local a un script, sta es independiente de toda instancia.
Por ejemplo, el siguiente cdigo funcionara aunque la variable foo no est definida
en OtraInstancia .

var foo;
foo="bar";
with (OtraInstancia) {show_message(foo);}

Aprender GML paso a paso


POR DAVID JUNIO 9, 2015
Hasta ahora hemos hablado de la interfaz grfica de Game Maker Studio y de
todos los recursos que nos ofrece el programa. Hemos detallado que son los
sprites, como aadir y modificar fondos, agregar sonidos, crear rutas, lneas de
tiempo y lo ms importante: crear objetos con sus eventos y acciones para que
nuestro juego sea lo ms interactivo posible.

Pero si de verdad queremos potenciar nuestros juegos, crear proyectos ms


complejos o ampliar las caractersticas y opciones, est claro que toca programar
cdigo. Y Game Maker nos da esa posibilidad.

Aprender a programar un lenguaje no debe de ser difcil, es cuestin de practicar,


practicar y practicar. Aunque veas cientos de ejemplos y te leas cmo funcionan
los algoritmos, si no escribes lneas y lneas de cdigo no aprenders a crear
nuevos juegos o mejorar lo que ya sabes. No quiero ser pesado en el tema e
insistir demasiado, la teora est muy bien, pero la clave es ponerlo en prctica.

1 Como enfocar los posts


2 Qu lenguaje usa Game Maker?
3 Dnde podemos usarlo?
4 Como nos referimos a los recursos
5 Qu es un programa? Cmo funciona el cdigo?
6 Conclusin
Como enfocar los posts
Si ya has programado en otros lenguajes, te adaptars muy fcilmente al lenguaje
de Game Maker Studio, ya que es menos restrictivo que otros lenguajes de
programacin.

Mi intencin es ensear el lenguaje desde cero, as que es posible que mucho de


los posts que haga no interesen demasiado. Pero espero aportar a todos los que
quieran empezar desde el principio.

Ir enseando el lenguaje de programacin con pequeos ejemplos prcticos que


podis aprovechar en cualquier juego que hagis, y as vemos que el cdigo es
aprovechable en muchos casos.

Hasta ahora eran necesarias explicaciones detalladas de cmo funcionan los


sprites, los sonidos, los objetos, eventos, etc pero en el apartado de GML har
post mucho ms cortos, espero que de esta manera puedo escribir ms
frecuentemente.

En paralelo, tambin empezar a aadir los tutoriales. Empezar con el primer


juego Tappy Plane, as vemos de una manera muy sencilla cmo crear un mini
juego, que puede ser perfectamente vlido para un portal web o un juego de
mvil.

Qu lenguaje usa Game Maker?


Si te preguntas que lenguaje de programacin usa Game Maker, diremos que usa
GML. Qu significa GML? GML son las siglas de Game Maker Language. Es
un lenguaje de programacin propio y exclusivo de Game Maker, aunque se
parece mucho a Java o C. La ventaja es que es mucho ms flexible. Har un post
especfico de las diferentes maneras que se puede escribir, pero es importante
usar un estilo adecuado y siempre hacerlo de la misma forma.
No hace falta decir que las acciones de Drag&Drop que hemos visto hasta ahora
tiene su equivalente en GML.
Dnde podemos usarlo?
Se puede escribir cdigo en varios lugares de Game Maker, tal y como hemos
visto. Vamos a refrescarlo:

Scripts. Los scripts son trozos de cdigo que podemos aprovechar en


cualquier objeto. Est pensado para escribir tus propias funciones.
Eventos. Dentro de un objeto podemos escribir cdigo con la accin Execute

Code . Recuerda que tambin puedes combinar tu cdigo escrito con


otras acciones que hemos arrastrado.
Cdigo de crear la room. Ya vimos que desde el editor de rooms podemos
poner cdigo especfico en la room. Podemos decir que tiene su propio

evento Create . Podemos aadir cdigo cada vez que se entra en la room.
Cdigo de crear en la instancia. Sabemos que las acciones del

evento Create se ejecutar en todas las instancias que tengamos en la


room. Pero es posible aadir cdigo a una o varias instancias desde la room.
Recordemos tener en cuenta el orden de ejecucin de eventos del juego para
no tener sorpresas.
Como nos referimos a los recursos
Ya hemos ido comentando como solemos llamar a los recursos. Para poder
utilizarlos mientras codificarlos, es importante saber que se pueden usar las
letras, el guin bajo _ y nmeros que no estn al principio. Por ejemplo
spr_wall, SprWall, sprwall6 son vlidos. Pero si usamos nombres como
spr wall o 6 wall, no podremos usarlo en GML.
Otro tema importante, Game Maker distingue maysculas y minsculas. Es decir,
para Game Maker es diferente sprwall, SprWall o SPRWALL. Pero est
claro que tampoco tenemos que intentar confundirnos.
Yo utilizar la misma forma que se ve en las constantes y variables de sistema de
Game Maker. Escribir todo en minsculas, usar bastante el _ y usar prefijos
para identificar los diferentes recursos spr_, obj_, snd_, etc. Es curioso porque he
programado en otros lenguajes y no he visto nunca esta nomenclatura.
Cuando veamos ejemplos de cdigo veremos lo importante que es saber si al
escribir wall nos estamos refiriendo a un sprite, un objeto o una variable.
Qu es un programa? Cmo funciona el
cdigo?
Cuando aadimos un nuevo evento, podemos arrastrar acciones que se ejecutarn
en ese evento. Cmo se hara en GML? Exactamente igual.
Un bloque de cdigo es un conjunto de instrucciones que se van ejecutando lnea
a lnea. Por eso se dice que es secuencial. Puede ser una instruccin sencilla,
como una suma o puede ser una instruccin compleja, como calcular la distancia
entre dos objetos.
Escribir las instrucciones es tan sencillo como esto:
instruccion1;
instruccion2;

Vemos que cada instruccin acaba con un punto y coma ;, es una manera de
decirle al programa que ha acabado esa instruccin. Debido a que Game Maker
es bastante flexible, como hemos comentado, no es obligatorio poner ;, pero yo
lo recomiendo para tener un cdigo lo ms ordenado posible. Otro ejemplo:
Ejemplo de cdigo GML en el evento Create. Vemos que se declaran algunas variables para usarlas en otros
eventos.

Conclusin
Hemos hecho una pequea explicacin la importancia de programar con cdigo.
Con una pequea introduccin hemos comentado el lenguaje de programacin
que podemos usar con Game Maker Studio. En el prximo post hablar de las
variables y cmo las podemos usar en nuestro cdigo.
Programa.
Un programa es un conjunto de instrucciones llamadas sentencias, que son
interpretadas por GameMaker:Studio con el propsito de hacer que algo ocurra dentro
de un juego. Ese "algo" puede ser una accin tan simple como sumar 2 ms 2 para
obtener 4, o tan complejo como hacer que un enemigo huya cuando su salud baja de
cierto nivel. La estructura de un programa vara enormemente depndiendo de las
funciones que usa, pero reducindolo a su estructura ms bsica, la representacin de
cualquier programa sera:

{
<statement>;
<statement>;
...
}

Un programa debe comenzar con el smbolo '{' y terminar con el smbolo '}', y entre
estos dos smbolos se ubican las sentencias, cada una separada con un smbolo de
punto y coma ';'. Ahora veamos un tpico programa de GML , ms precsamente un
programa creado en el Editor de Scripts de GameMaker:Studio:
Existen diversos tipos de sentencias, las cuales se discutirn en las siguientes
secciones del manual.

Variables y su alcance.
Se tratan los diferentes tipos de variables disponibles
en GameMaker:Studio.

Como cualquier otro lenguaje de programacin, GML usa variables como la unidad
bsica para la mayora de las operaciones de programacin. Las variables se utilizan
para almacenar informacin en la memoria para su posterior (o inmediato) uso. Se les
asigna un nombre para poder llamarlas en funciones y programas. Una variable en
GML puede almacenar un nmero real, (como 100, 2.456575, -56, etc.) o una cadena
(como "Hola , mundo").

De manera coloquial, una variable es un contenedor para poner un valor que se usar
en una o ms operaciones o funciones. Imagina el valor "pi", Un nmero de tipo real
que guarda el valor 3.14159265(etc...). Por qu? Es ms fcil decir "pi" que "tres
punto catorce quince noventaydos sesenta y cinco. De este modo, darle nombre a los
valores facilita su uso, y tambin nos asegura que aun cuando el valor de la variable
cambie, su nombre ser siempre el mismo. El nombre de una variable en GML siempre
debe comenzar con una letra y slo puede contener letras, nmeros y el guin bajo '_'
(no se admiten cacateres acentuados ni especiales). Su longitud no debe exceder los
64 caracteres. Ejemplos de variables vlidas son velocidad, limite_inferior, numero1;
nombres no vlidos podran ser 5velocidad, limite superior, o *numero. En otros
lenguajes de programacin, es necesario "declarar" una variable antes de usarla. Esto
quiere decir que se le indica a la computadora el nombre con el que se desea
identificar esa variable, de tal modo que se le reserve un espacio en memoria para
almacenar cualquier dato que se desea "poner" en la variable. Esto no siempre es
necesario en GML, ya que depende del alcance de la variable. Hay cuatro categoras
de variables en GameMaker:Studio y cada una tiene su propio alcance (el area de
operacin o su dominio). Las cuatro categoras son:

instancia: La categora ms comn. Las variables son definidas dentro de la


instancia. Son nicas y propias de su instancia y se les puede usar en cualquier
evento y cualquier funcin dentro de esa instancia.

local: Estas variables se declaran mediante la funcin "var". Una variable local
slo es vlida dentro del evento o script en el cual se crea. En este
caso GameMaker:Studio crear la variable, la usar el tiempo que dure el
evento y luego se "olvidar" de ella, lo que causar que se obtenga el error
"unknown variable" si se intenta usarla posteriormente..

global: Una variable global pertenece a todo el entorno de juego, y no a una


instancia en especfico (a pesar que se declare dentro de una instancia). En un
principio, tiene que declararse como global, pero despus de esto, cualquier
instancia puede leer o cambiar su valor. El valor de la variable siempre reflejar
la ltima operacin de la que fue objeto, sin importar qu instancia desarroll la
operacin.

Variables internas: Son variables especiales inherentes a los objetos y


habitaciones en el entorno. Estn ah desde que una habitacin u objeto es
creado. Pueden tener alcance de instancia o global, pero nunca local. Hay una
gran cantidad de estas variables y cada una tiene usos muy especficos, se les
describe con detalle a lo largo del manual en las secciones correspondientes.

Variables de Instancia
El alcance de una variable de instancia est limitado a la instancia donde se
crea.
Una variable de instancia se crea dentro dela instancia de un objeto y es considerada
nica para esa instancia: muchas instancias del mismo objeto pueden tener la misma
variable, pero cada uno puede guardar un valor distinto, ya que esas variables son
nicas a cada instancia. Cmo se crea una variable de instancia? Slamente hay que
asignarle un valor, com ose muestra a continuacin:

pociones = 12;
vida = 100;
nombre = "Juan Prez";
fuerza = 5.5;
armadura = -2;

Slo es necesario proporcionar un nombre y un valor (numrico o alfabtico) para


iniciar una variable y dejarla lista para usarse en la instancia del objeto que se est
codificando. Desde luego, estas variables se pueden usar y modificar dentro de la
instancia de distintas maneras, por ejemplo, restar una cantidad de la variable "vida"
en un evento de colisin:

vida -= 5 + armadura;

Si la vida "vida" est en 100, su valor cambiar a 97 (100 - (5 + -2) = 97). Esto es un
ejemplo sencillo, se podra reemplazar "armadura" por el valor -2, pero qu pasa si se
usa ese valor en distintos lugares y decides cambiarlo? Se tendra que ir por todo el
cdigo y cambiar cada -2 por el nuevo valor, lo cual consume tiempo y puede conducir
a errores! pero al usar una variable, todo lo que hay que hacer es reasignarle un nuevo
valor, el cual ser usado automticamente en el cdigo, aumentando la flexibilidad y
facilitando la correccin de errores. Aun si el valor no fuera a cambiar, es ms fcil
recordar qu uso tiene una variable llamada "vida" que slo ver un nmero.

GameMaker:Studio posee adems un conjunto de variables internas con las que es


importante familiarizarse, ya que accidentalmente se podra crear una variable con un
nombre igual, lo que probablemente provocara erores. Las variables internas se
muestran con un color distinto en el editor de cdigo y tambin aparecen sugeridas en
la barra de auto-completar al fondo.

Variables locales
Una variable local se declara, se usa y despus se descarta.
Las variables locales solamente se crean para eventos especficos, cuando dicho evento
finalice, la variable se descarta (La nica excepcin a esto son los scripts, donde una
variable declarada como local se mantiene local al scri0pt, y luego se descarta). Por
qu habramos de necesitarla? Las variables ocupan espacio en memoria, y puede ser
que slamente las usaremos para una operacin o funcin, en tal caso slo es
necesario tenerlas en memoria slo el tiempo que sean usadas. Esto mantiene el
cdigo base limpio y ordenado, a la vez que se optimiza el espacio en memoria para
las cosas que son realmente necesarias. Para declarar una variable local usamos la
funcin var de esta manera:

var i, numero, texto;


i = 0;
numero = 24.5;
texto = "Hi there!";

Todas las variables del ejemplo anterior se "olvidarn" (desaparecern de la memoria)


al final del evento (o el script) en que fueron creadas. Debes ser cuidadoso y no dar a
una variable local el nombre de una variable de instancia ya creada dentro del objeto
ejecutando el cdigo, y adems, no tener la intencin de usar el valor de la variable
local fuera del evento donde ha sido declarada. Estas variables son usadas de manera
frecuente, sobre todo en ciclos, para contar iteraciones, o cuando un valor se usa
recurrentemente en una operacin que no volver a repetirse. Aqu un par de
ejemplos:
var i = 0;
repeat (10)
{
inventario[i] = 0;
i+=1;
}

El cdigo anterior crea una variable local de nombre "i" y la inicia en cero, and sets it
to 0, todo en la misma lnea. En veriones previas de GameMaker era necesario declarar
primero la variable local primero y luego asignarle un valo, pero en esta versin se
puede declarar y asignar un valor al mismo tiempo. En el ejemplo, el valor de la
variable se usa para iniciar un arreglo. Como la variable "i" no va a ser usada en otras
operaciones posteriores, puede tener un alcance local. Aqu hay otro ejemplo:

var xx,yy;
xx = x - 32 +irandom(64);
yy = y - 32 +irandom(64);
instance_create(xx, yy, obj_blood);

Aqu se ha usado la variable local para almacenar coordenadas aleatorias qusadas para
crear una instancia. Se puede ver que no es estrictamente necesario usar estas
variables, pero para propsitos de claridad y facilidad de uso lo hacemos as. Es mucho
ms claro y obvio lo que se est haciendo, que usar cdigo como este:

instance_create(x - 32 + irandom(64), y - 32 + irandom(64), obj_guts);

Un detalle acerca de las variables locales: Al ser nicas al evento que las ejecuta,
tambin es posible usarlas en otras instancias mediante cdigo! Es decir, podemos
usar variables locales para ajustar y cambiar cosas en otras instancias mediante la
sentencia "with()" (hay una seccin sobre esto en seccin Generalidades del
lenguaje en el manual). El cdigo lucira as:

var num = instance_number(obj_Enemy);


with (obj_Enemy)
{
if num>10 instance_destroy();
}

Este cdigo funciona porque la variable "num"es local al evento (o script) en el que
est contenida, NO A LA INSTANCIA NI EL ENTORNO DE JUEGO, lo que permite usarla
en cualquier funcin en cualquier objeto siempre y cuando est en el mismo bloque de
cdigo.

Variables globales
En trminos simples, una variable global es un tipo de variable que una vez declarada
no pertenece a ninguna instancia, pero puede ser leda por todas ellas. Las variables
globales deben ser declaradas, tal como sucede con las variables locales, pero a
diferencia de stas, una variable global permanece en memoria hasta el final del
juego. Por ejemplo, se puede crear una variable global para llevar un registro del
nmero de balas del jugador y sencillamente actualizar esta variable en distintos
puntos del juego. Una variable global no pertenece a una instancia en particular y
puede ser leda, cambiada y usada por todas las instancias en cualquier momento,
pero cualquier cambio hecho a la variable es tambin "global", es decir, el cambio
afecta a todas las instancias que usen dicha variable. Veamos un ejemplo de esto:

globalvar food;
food = 5;

hemos creado una nuava variable llamada "food" la cual ha sido declarada como
global. "food" esta disponible para cualquier instancia, por ejemplo, podra haber un
objeto "food" contra el que el jugador colisione, y en ese evento de colisin
tendramos:

food +=1;

Podramos tener otro objeto que dibuje el valor de "food", de esta manera:

draw_text(32, 32, "food = " + string(food));

Mediante variables globales podemos cambiar valores y ver reflejados esos cambios en
todas las instancias que hagan referencia a esas variables. De la misma manera que
con las variables locales, hay que tener cuidado de no nombrar de igual manera que
alguna variable de instancia, ya que esto causara problemas y se facilitara la
aparicin de errores en el juego. Como recurso para evitar estos inconvenientes,
podemos llamar a las variables globales usando la palabra reservada "global" seguida
de un punto "." antes de la variable. Esto se ilustra a continuacin:

global.food = 5;

Con este mtodo, debemos usar la palabra "global" cada vez que deseemos usar la
variable, por ejemplo:

global.food += 1;
draw_text(32, 32, "food = " + string(global.food));

GameMaker:Studio tambin posee una coleccin de variables globales "predefinidas",


por lo que se las debe tener en cuenta para no nombrar de la misma manera a
variables de instancia o a variables globales propias. Sin embargo pestas variables son
fciles de detectar ya que se muestran en distinto color en el editor de cdigo y
aparecen en la barra de auto-completado en la parte inferior. La mayora de las
variables globales predefinidas son muy especficas y rara vez se les utiliza, pero hay
tres variables en particular que son muy tiles y comunes, por lo que se describen a
continuacin listed below:

o score
o health
o lives

score
Variable global para almacenar el marcador del juego.
Sintaxis:
score;

Devuelve: Real

Descripcin
Esta variable tiene un alcance global y se usa para almacenar un valor numrico que
generalmente se trata del marcador del juego, sin embargo no necesariamente debe
ser as - que el nombre sea "score" (marcador) no significa que tenga que ser usada
para el marcador... puede almacenar el valor que se desee.

Ejemplo:
if place_meeting(x, y, obj_Bullet)
{
score += 10;
instance_destroy();
}
Este cdigo revisa la instancia actual para determinar si hay una colisin con alguna
instancia del objeto "obj_Bullet", y si la hay, suma 10 al marcador global y a
continuacin se destruye.

health
Variable global para almacenar los puntos de salud.
Sintaxis:
health;

Devuelve: Real.

Descripcin
Esta variable tiene un alcance global y se usa para almacenar un valor numrico que
generalmente representa la salud del jugador health, pero hay que tener en cuenta
que esto no necesariamente tiene por que ser as. A pesar de que el nombre es
"health", se puede usar para almacenar cualquier valor numrico til para el juego.

Ejemplo:
if place_meeting(x, y, obj_Enemy)
{
health -= 10;
if health <= 0 instance_destroy();
}
El cdigo anterior revisa si hay una colisin con el objeto indexado en la variable
"obj_Enemy", y de haberla, resta 10 puntos de la variable global health y luego
determina si el valor de dicha variable es menor o igual a ceroSi se cumple esta
condicin, la instancia que ejecuta el cdigo se destruye.
Accediendo a variables desde otras
instancias
Se describen varios mtodos para llamar a variables en otras
instancias.

Anteriormente se describi cmo crear y usar variables dentro de una instancia, o de


manera global, pero qu pasa cuando desde una instancia se quiere acceder a una
variable en otra instancia distinta? Hay muchos casos en que se presenta esta
situacin, por ejemplo, si en un evento de colisin con una bala se quisiera saber
cunto dao causa la bala, leyendo una de sus variables, o si se desea detener el
movimiento de todas las balas en la habitacin; o mover al protagonista a una posicin
determinada, por mencionar algunas. Veamos cmo lograrlo mediante GML.

Usando un punto "."


Este mtodo consiste en usar el nombre del objeto como identificador, seguido de un
punto ".", seguido del nombre de la variable que se quiere cambiar o asignar. Es
decir:

obj_ball.speed = 0;

Lo que hace el cdigo anterior es ajustar la velocidad de TODAS las instancias del
objeto "obj_ball", as que este mtodo permite cambiar una variable en todas las
instancias de algn objeto. Y si se quiere cambiar la velocidad de slamente
una instancia en particular, en lugar de todas? En tal caso, el principio es el mismo,
excepto que en lugar de usar el nombre del objeto como identificador de todas sus
instancias, usamos el identificador de la instancia para decirle
a GameMaker:Studio que slo queremos manejar una sola instancia.

Bien, pero qu es identificador de la instancia? Es un nmero de identificacin


nico asignado a cada instancia creada en el juego. Cuando se coloca una instancia en
una habitacin desde el editor de habitaciones, este identificador aparece en la parte
baja de la pantalla si se posa el puntero del ratn sobre la instancia, pero de igual
manera, si se crea una instancia mediante cdigo, tambin ella posee su identificador
nico. El id de instancia es siempre mayor o igual a 10,000 (diez mil), y este nmero
puede ser usado tambin como identificador al lado izquierdo del punto. Nota: El
punto es interpretado como un punto decimal en un nmero real, as que para evitar
esto, hay que encerrar el id dentro de parntesis!

El siguiente ejemplo muestra cmo se debe escribir esto:

(100012).speed = 0;

Adicionalmente, tambin se pueden usar ciertos objetos especiales o incluso variables


para identificar instancias en los juegos. Una objeto especial es un tipo especial de
variable que GameMaker:Studio reconoce e interpreta de manera particular. Al tratar
con instancias, contamos con los siguientes objetos especiales:
Palabra Clave Descripcin

Se refiere a la instancia que est ejecutando el bloque de


self
cdigo actual.

Se refiere a la otra instancia involucrada en un evento de

other colisin,

o la otra instancia de una sentencia with.

all Todas las instancas activas al momento en la habitacin.

Ninguna instancia (Puede parecer extrao, pero es


noone
muy til en ocasiones, como se ver a continuacin).

En el caso de usar variables, se trata simplemente de almacenar el identificador de


instancia en una variable, la cual se usa entonces antes del punto. En el siguiente
ejemplo se ilustra esto...

Usando una palabra clave para ajustar todas las instancias:

if instance_position(mouse_x, mouse_y, all) = noone


{
all.speed = 0;
}

Usando una varible para ajustar una sola instancia:

var nnn;
nnn = instance_create(100, 100, obj_ball);
nnn.speed = 8;
nnn.direction = random(360);

Todas estas son formas vlidas de leer y ajustar variables en otras instancias, y
funciona porque el punto es en realidad un operador. Toma un valor como operando
izquierdo y una variable (direccin) como operador derecho, y devuelve la direccin de
esa variable en particular en el objeto o instancia indicada. Todos los nombres de
objetos y objetos especiales de los prrafos anteriores representan en realidad valores,
estos valores pueden ser tratados como cualquier otro valor. Los Nombres de objetos,
los objetos especiales y los identificadores de instancia se pueden usar en muchas
otras funciones, ya que GMS los trata como constantes. write.

El uso de "other"
Hay dos situaciones en que la palabra reservada other puede ser usada para hacer
referencia a una instancia en especfico: Cuando se usa en una
funcin with (explicado aqu) o cuando se usa en un evento de colisin, que es el caso
que veremos a continuacin.

Un evento de colisin ocurre solamente entre un par de instancias. Desde luego que se
pueden presentar colisiones mltiples entre mltiples instancias, pero cada colisin es
tratada por GameMaker:Studio una a una, entre la instancia en la que se defini el
evento de colisin y la "otra" instancia involucrada. Imaginemos que tenemos un
objeto jugador, objetos enemigos y objetos bala disparados por los enemigos. Se
puede asignar a cada enemigo una instancia de bala, pero con distinta capacidad de
dao calculada de manera aleatoria cuando se crea dicha instancia, por ejemplo:

var nnn;
nnn = instance_create(x, y, obj_Bullet);
nnn.damage = 5 + irandom(5);
nnn.speed = 8;
nnn.direction = point_direction(x, y, obj_Player.x, obj_Player.y);

Observa que estamos ajustando variables mediante el mtodo del punto antes
explicado. Ahora, qu pasa con el objeto jugador? Cmo hacer para que sepa cunto
dao va a recibir? Usando other en el evento de colisin (del objeto jugador).

hp -= other.damage;
if hp <= 0 instance_destroy();

el cdigo de arriba leer el valor almacenado en la variable "damage" de


la otra instancia y lo restar de la variable "hp" del jugador, luego revisar si "hp" es
menor o igual a 0. Si lo es, destruir la instacia del object jugador. Es importante
subrayar que este uso de otherslo funciona en el evento de colisin y que hay que
asegurarse que las variables de la otra instancia existan, o de lo contrario causar
error. Sin embargo, mediante other se pueden asignar valores a variables e incluso
crear nuevas , usndola en el evento de colisin as:

other.mana += 10; //suma diez al a variable "mana" de la otra instancia


other.hit = true; //pon la variable "hit" de la otra instancia como verdadero,
crendola si es que no existe

Asignaciones
Una asignacin es el mtodo usado para almacenar un valor en una variable. Toda
asignacin presenta la siguiente estructura:

<variable> = <expresin>;

La expresin ms sencilla puede ser un simple valor, pero tambin puede ser ms
compleja (una o varias operaciones). Adems de asignar valores, tambin podemos
sumar un valor al valor actual de la variable, usando +=, por ejemplo:

a += b;

De igual manera, se puede sustraer usando -=, multipicar usando *=, dividir
usando /=, o usar operadores bit a bit |=, &=, o ^=. Tambin se puede sumar o
restar uno de una variable, mediante ++, --.

a++; //Sumar 1 al valor almacenado en a

S-ar putea să vă placă și