Cuando creas un cuarto muy grande, por ejemplo en juegos de plataformas, con una vista (view) muy pequeña, muchas instancias se quedan fuera de la vista. Aunque no sean visibles, estas instancias siguen ejecutando sus eventos. También, al efectuar chequeos de colisión son tomadas en cuenta. Esto puede hacer que el juego se ralentice. Para remediar esto, Game Maker contiene unas funciones para desactivar o activar instancias. Pero antes de usarlas debes entender cómo funcionan.
Cuando desactivas instancias es como si las eliminaras del juego. No son visibles, no ejecutan sus eventos,…así que para todas las funciones y acciones estas instancias ya no existen y no son tomadas en cuenta. Así consigues que el juego sea más rápido. Pero ten cuidado, ya que esto puede generar errores en tu juego. Por ejemplo, al eliminar todas las instancias de un objeto, las instancias que estén desactivadas no serán eliminadas! Así, una llave que recoja el jugador no podrá abrir una puerta que esté desactivada, por ejemplo.
El error más crucial que puedes hacer es el de desactivar la instancia que se encarga de activar las demás instancias. Para evitar esto algunas funciones permiten especificar si la instancia que desactiva a las demás debe ser desactivada o no.
Las rutinas disponibles son las siguientes:
instance_deactivate_all(notme)
Desactiva todas las instancias del cuarto. Si
notme es true
la instancia actual no es desactivada (normalmente es lo que se desea).
instance_deactivate_object(obj)
Desactiva todas las instancias en el cuarto del objeto especificado. También
puedes indicar
all
para desactivar todas las instancias o la id de una instancia concreta para
desactivarla.
instance_deactivate_region(left,top,width,height,inside,notme)
Desactiva todas las instancias en la región indicada (es decir, todas aquellas
cuya caja de contorno está parcial o completamente dentro de la región
indicada). Si
inside
es igual a false las instancias completamente fuera de la región son
desactivadas. Si
notme
es true la instancia actual no es desactivada (normalmente es lo que se desea).
instance_activate_all()
Activa todas las instancias del cuarto.
instance_activate_object(obj)
Desactiva todas las instancias en el cuarto del objeto especificado. También
puedes indicar
all
para desactivar todas las instancias o la id de una instancia concreta para
desactivarla.
instance_activate_region(left,top,width,height,inside)
Activa las instancias dentro de la región especificada. Si
inside
es false las instancias fuera de la región son activadas.
Por ejemplo, para desactivar todas las instancias fuera de la vista y activar las que estén dentro podemos poner este código en el evento step del personaje del jugador:
{
instance_activate_all();
instance_deactivate_region(view_xview[0],view_yview[0],
view_wview[0],view_hview[0],false,true);
}
Normalmente es mejor usar una región ligeramente mayor que la vista.