Hola, una pregunta.

room_goto_previous()  va a la room anterior, la que se ha cerrado antes,  o la anterior en el árbol de room en el gamemaker?
Porque me pasa algo raro, le pongo eso, y no me vuelve a la anterior, me vuele a otra.


Esa función te lleva a la room anterior según el orden las rooms en el árbol de recursos.
Para volver a la room visitada anteriormente se necesita una variable que guarde su indice.

Gracias. Con global.roomanterior= room,  me devuelve un numero. Como puedo ssaber ese numero desde el arbol?? Pata no tener que estar en cada room para ver el numero.

#4 Abril 11, 2015, 10:42:49 AM Ultima modificación: Abril 11, 2015, 10:55:42 AM por penumbra
Ese número es el índice de la habitación actual. El nombre de cada habitación apunta o hace referencia a su índice. No es necesario saber el número/índice, porque se le puede llamar implícitamente por el nombre desde cualquier habitación. Cuando se hace esto
if (room == room_bosque_de_sombras)

en realidad se están comparando dos números (índices), pero como se ve, se hace sin necesidad de saber el número de cada habitación. Resumiendo: desde el punto de vista práctico, con el nombre basta. Como con los demás recursos, se puede usar el número de recurso (índice) en lugar de su nombre, pero yo personalmente no le veo ventaja a esto, ni lo recomendaría.

Aunque se puede, el manual no recomienda cambiar de habitación alterando el valor de la variable room directamente. Se recomienda el uso de la función room_goto() en todo caso

Gracias,  pero eso lo se. Haber si me explico mejor.  Tengo un objeto permanente, con evento  room end. Donde guardo en una variable la room que es. Pero me guarda el jndice, no el nombre. Para asi saber cual es la room de donde vengo para cuando acabe volver a ella, porque puedo venir desde varios sitios. Por lo tanto, para luego, en funcion de donde venga, saber a donde ir.

#6 Abril 11, 2015, 11:03:58 AM Ultima modificación: Abril 11, 2015, 11:35:58 AM por penumbra
Cita de: arcangelcaos en Abril 11, 2015, 10:52:10 AM
Pero me guarda el jndice, no el nombre.
Para volver a una habitación (la que sea) no es necesario saber el nombre. Se entiende que el índice de una habitación no cambia, siempre es el mismo, esto garantiza que el volver a la habitación anterior siempre sea posible, y para hacer eso, no es necesario conocer las dos cosas, sólo una (con el índice basta, y el índice es lo que se puede guardar en cualquier variable, y de hecho, es más fácil/directo regresar usando una variable que contenga el índice que usando una variable que contenga el nombre)

Creo que lo que está fallando es la lógica que aplicas para volver

Pero como en el mensaje anterior parece que quieres obtener el nombre, pues también hay una función para eso
room_get_name(index);
Devuelve una cadena conteniendo el nombre de la habitación. Aunque una cadena no se puede usar para referenciar directamente una habitación

No lo he probad, pero creo que esto debería solucionar el problema
CREATE[gml]
globalvar hab_previa, hab_actual;
hab_previa = room
hab_actual = room[/gml]

STEP
[gml]
if (hab_actual != room)
{
     //Esto siempre ocurre en el primer STEP de cada nueva habitación
     hab_actual = room
}[/gml]

ROOM END
[gml]
//La habitación que se deja es la actual
hab_previa = hab_actual[/gml]

Gracias de verdad, pero o soy yo, que estoy osfuscado  :-[ :-[ :'( :'(. O no me explico bien.

Tengo digamos, 5 mapas generales, donde puedo elegir a que pantalla del juego ir(entre 10 o 15, dependiendo del mapa). Luego tengo 1 room con 7 background, y se elige el visible aleatoriamente, así como los monstruos dependiendo de una variable a parte. Entonces, lo que necesito es, que cuando acabe la batalla, volver al mapa general del que procedo. Pero es mas, como también tengo historia y tutoriales, quiero identificar de donde vengo, para que si toca una historia, no volver a al mapa e ir a la room del tutorial o historia. Y luego de hay al mapa.
Espero haberme explicado bien.

EVENTO END ROOM  global.roomanterior = room

OTRO EVENTO QUE SE EJECUTA AL TERMINAR LA BATALLA
if global.roomanterior = ???  {room_goto(roomhistoris) } 
else
{room_goto(global.roomanterior)}
esto lo que uso

Funcionar funciona, pero como no me se los índices de las room, me cuesta controlarlo.

Gracias, pero ya lo solucione

if global.roomanterior = "rmTutorial1" {room_goto(rmGranja2);exit}
if global.roomanterior = "rmRuinas" {room_goto(rmRuinas2);exit}
if global.roomanterior = "rmMapa1" {room_goto(rmMapa1);exit}
if global.roomanterior = "rmBosqueMapa" {room_goto(rmMapa1);exit}

Y en el evento end room
global.roomanterior=room_get_name(room)