Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: somnus en Septiembre 12, 2015, 04:54:03 AM

Título: variable global no se reconoce desde otro objeto[SOLUCIONADO]
Publicado por: somnus en Septiembre 12, 2015, 04:54:03 AM
pues en si, es que tengo un script con variables globales, y tengo varios objetos que las inicializan,

por ejemplo

obj_a inicializa todas las variables globales


y cuando quiero hacer uso de algunas de esas variales globales en otro objeto, me aparece el valor "-4", que es el de NOONE,

segun yo desde el momento en que se le pone valor a una variable global, esta al ser llamada por otro objeto debe de tener el mismo valor, o estoy mal, a que se puede deber este comportamiento?




Título: Re:variable global no se reconoce desde otro objeto
Publicado por: penumbra en Septiembre 12, 2015, 05:48:49 AM
Un error "-4" es algo muy ambiguo, deberías indicar cuál es el mensaje de error completo. "noone" tiene relación más con instancias/objetos que con variables. Cuando GM no reconoce una variable arroja más bien un error PUSH.

Cita de: somnus en Septiembre 12, 2015, 04:54:03 AM
desde el momento en que se le pone valor a una variable global, esta al ser llamada por otro objeto debe de tener el mismo valor
Depende de qué cosas o eventos hayan pasado desde la asignación del valor hasta la lectura de la variable en otro objeto. En ese lapso, el valor pudo haber sido cambiado a propósito o por error.
Título: Re:variable global no se reconoce desde otro objeto
Publicado por: somnus en Septiembre 12, 2015, 06:06:40 AM
disculpa mi ignorancia, aqui pongo el mensaje que me sale:

"Unable to find any instance for object index '-4' name '<undefined>'
at gml_Object_obj_draw_spells_StepNormalEvent_1 (line 111) -     show_debug_message(" - - - >  "+string((global.ob_creator).fire_cur_gauge));
############################################################################################"

cabe mencionar que la variable global, guarda el ID de una instancia, cuando en otro objeto quiero hacer lo siguiente

global.ob_creator.fire_cur_gauge -= 10;  (  1000060.fire_cur_gauge  #seria asi tomando el id del objeto     )


espero haberme explicando un poco mas


Título: Re:variable global no se reconoce desde otro objeto
Publicado por: penumbra en Septiembre 12, 2015, 06:21:47 AM
Puede que se me escapa algo, pero lo que el mensaje indica es que al momento de ejecución, no existe ninguna instancia en la habitación del objeto guardado en ob_creator.

A lo mejor, en lugar de guardar una instancia en esa variable global (es una suposición, no lo sé en realidad), estás guardando el índice de un objeto, que no es lo mismo. Sería bueno ver qué instrucción usas para guardar la instancia en la variable global.ob_creator
Título: Re:variable global no se reconoce desde otro objeto
Publicado por: kostra en Septiembre 12, 2015, 01:33:39 PM
Personalmente, yo para ahorrarme todo tipo de errores con globales, tengo la costumbre de dedicar una primera room, con una unica instancia con todas las globales en el evento game start (o create), con un room_goto_next(); al final, de manera que lo engo todo bien ordenado en un lugar facil de encontrar y asi de SEGURO no se confronta con nada y por el momento me ha ido muy bien, cero errores :3
Título: Re:variable global no se reconoce desde otro objeto
Publicado por: somnus en Septiembre 12, 2015, 10:27:05 PM


EV CREATE

global.ob_creator= id; // se pone en la variable global el ID de la instancia que necesito, todos los scripts que se ejecutan en esta instancia, no tienen problemas en obtener ese valor, los objetos diferentes a este son los que no toman eso, vere la inicializacion de las variables, porque segun yo, no vuelvo a cambiar valores de esa funcion.

es decir, me esta tomando esa variable como una variable normal de dicho objeto y no global
Título: Re:variable global no se reconoce desde otro objeto
Publicado por: penumbra en Septiembre 13, 2015, 12:20:12 AM
Si en un objeto tienes esto:
[gml]global.ob_creator= id[/gml]
y luego quieres hacer esto desde otro objeto
[gml]global.ob_creator.variable[/gml]
para leer una variable de ese objeto, no es necesario guardar la id de instancia en una variable global, porque, mientras exista una instancia de ese objeto en la habitación, se puede acceder a cualquier variable de ese objeto mediante nombre_de_objeto.variable, sin intermediarios (sin recurrir a una global). Ahora, si hay más de una instancia de ese objeto (que quizás no sea tu caso), entonces no tiene caso asignar la instancia en un evento CREATE, porque la variable global se sobreescribirá varias veces y quedaría con el id de la última instancia de ese objeto.

¿Qué nombre tiene el objeto donde guardas la id en la variable global? Suponiendo que ese objeto se llame obj_alfa, Si usas instance_number(obj_alfa), cuántas instancias de este objeto hay justo antes de que ocurra el error que pusiste antes (error en la línea 111)
Título: Re:variable global no se reconoce desde otro objeto
Publicado por: somnus en Septiembre 14, 2015, 04:26:37 AM
gracias, le hice poniendo el nombre del objeto directamente como sugeriste, pero tamiben con la variable global deberia de funcionar porque no se sobrescribe en otro lado, en fin, marcare este como solucionado

gracias a todos