Las unidades básicas del juego son las instancias. Durante el juego, puedes cambiar varios aspectos de estas instancias. También puedes crear o destruir instancias. Además de las variables de movimiento y las de dibujo cada instancia posee las siguientes variables:
object_index*
Índice del objeto del cual ésta es una instancia. No se puede cambiar.
id* La id
única de la instancia (>= 100000) (Al definir cuartos la id de la instancia bajo
el puntero del ratón es indicada). No se puede cambiar.
mask_index
Índice de l sprite usado como máscara para las colisiones. Si indicas -1 la
máscara será igual al sprite de la instancia.
solid
Indica si la instancia es sólida o no.
persistent
Indica si la instancia es persistente y reaparecerá al moverse a otro cuarto. A
veces puedes querer volver a ponerlo a 0 (por ejemplo, al volver al primer
cuarto).
Al trabajar con instancias hay un problema: no es fácil identificar una instancia concreta. No tienen un nombre. Cuando sólo hay una instancia de un objeto puedes acceder a ella usando el nombre del objeto pero normalmente necesitas conocer la id de la instancia. Este identificador único se puede usar en construcciones with y para identificar la instancia. Afortunadamente, las siguientes variables te ayudan a localizar la id de una instancia:
instance_count*
Número de instancias que existen en el cuarto.
instance_id[0..n-1]*
La id de la instancia número n.
Observa que la asignación de las instancias al instance_id[] cambia en cada step, así que debes actualizar este valor. Por ejemplo: imagina que cada unidad en tu juego tiene un poder y quieres encontrar la más poderosa de todas. Puedes hacerlo con el siguiente código:
{
maxid = -1;
maxpower = 0;
for (i=0; i<instance_count; i+=1)
{
iii = instance_id[i];
if (iii.object_index == unit)
{
if (iii.power > maxpower)
{maxid = iii; maxpower = iii.power;}
}
}
}
Después del bucle maxid contendrá la id de la instancia más podersa (No destruyas instancias durante un bucle como éste porque se eliminarán inmediatamente y te saltarás instancias existentes).
instance_find(obj,n)
Devuelve la id de la instancia n+1 de tipo
obj.
obj
puede ser un objeto o la palabra clave
all.
Si no
existe se devuelve el objeto
especial
noone.
Recuerda que el
orden de las instancias cambia en cada step así que no puedes usar valores de
steps anteriores.
instance_exists(obj)
Devuelve si existe alguna instancia del objeto
obj.
obj
puede ser un objeto, la id de una instancia o la palabra clave
all.
instance_number(obj)
Devuelve el número de instancias de tipo
obj.
obj
puede ser un objeto o la palabra clave
all.
instance_position(x,y,obj)
Devuelve la id de la instancia de tipo obj en la posición (x,y). Cuando hay
varias instancias en esa posición se devuelve la id de la prtimera.
obj puede ser
un objeto o la palabra clave
all.
Si no existe se devuelve el objeto especial
noone
instance_nearest(x,y,obj)
Devuelve la id de la instancia de tipo obj que esté más cercana en ese momento a
(x,y).
obj
puede ser un objeto o la palabra clave
all.
instance_furthest(x,y,obj)
Devuelve la id de la instancia de tipo obj que esté más lejana en ese momento a
(x,y).
obj
puede ser un objeto o la palabra clave
all.
instance_place(x,y,obj)
Devuelve la id de la instancia de tipo obj encontrada cuando la instancia actual
se coloca en la posición (x,y).
obj
puede ser un objeto o la palabra clave
all.
Si no existe se devuelve el objeto especial
noone.
Las siguientes funciones se usan para crear y destruir instancias:
instance_create(x,y,obj)
Crea una instancia de obj en la posición (x,y). La función devuelve la id de la
nueva instancia creada.
instance_copy(performevent)
Crea una copia de la instancia actual. El argumento indica si se debe ejecutar
el evento create en la nueva instancia.
La función
devuelve la id de la nueva copia.
instance_destroy()
Destruye la instancia actual.
instance_change(obj,perf)
Cambia la instancia a una del tipo
obj.
perf
indica si se deben ejecutar los eventos de destrucción y creación.
position_destroy(x,y)
Destruye toda las instancias cuyo sprite pasa por el punto (x,y).
position_change(x,y,obj,perf)
Cambia todas las instancias en la posición indicada a otras del tipo
obj.
perf
indica si se deben ejecutar los eventos de destrucción y creación.