Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Enero 11, 2016, 02:56:17 PM

Título: [Solucionado] ver variable a partir de una string
Publicado por: kostra en Enero 11, 2016, 02:56:17 PM
Hola, miren, trato de hacerme un diminuto script para debug pongo un ejemplo de algo que no funciona, pero para que me entiendan lo que pretendo.
[gml]variable = get_string("var","");
show_message(string(variable));[/gml]

obviamente, en el mensaje saldrá lo que escriba en el get_string... pero lo que quiero es, poner en el get_string el nombre de una variable, ya sea "obj_player.vida" o "puntos" siendo esta una global, por ejemplo, entonces en el message, me salga el valor de esta variable... se entiende? es posible?

Grachie :B
Título: Re:ver variable a partir de una string
Publicado por: jmbs19 en Enero 11, 2016, 04:48:30 PM
hasta donde tengo entendido no se puede, hace no mucho un usuario aqui pregunto si se puede crear una variable a travez de un string, que es mas o menos lo que tu estas intentando, basado en que en c se podia hacer algo parecido, y aunque creo que en c si se podia en gml no. la unica manera que se me ocurre de emular lo que dices es usando ds_maps. hace como un mes se respondio una pregunta en la que se intentaba emular el exist_variable_local que fue despreciada en el gms usando ds_maps, buscala y veras como se hizo.
Título: Re:ver variable a partir de una string
Publicado por: kostra en Enero 11, 2016, 05:03:17 PM
bueno, no pretendo crear ninguna, sino ver el valor de las que ya existen...
Título: Re:ver variable a partir de una string
Publicado por: bygdle en Enero 11, 2016, 07:41:00 PM
Sí o sí debes usar una ds_map, ya que una variable convencional es un simple espacio de memoria, no puedes llamarlas o verlas desde strings.
Pero con ds_maps, es más fácil, sencillo, ordenado y eficiente.
Te dejo un ejemplo de cómo podrías hacerlo:

[gml]
global.vars = ds_map_create(); //Creamos el mapa que tendrá todas las variables

//agregamos los valores
ds_map_add(global.vars,"variable1","valor1");
ds_map_add(global.vars,"variable2","valor2");
[/gml]

Y cuando quieras hacer lo que mostraste en tu código, sólo haces:

[gml]
var variable = get_string("var","");
show_message( string( ds_map_find_value(global.vars,variable) ) );
[/gml]

Si el valor en la llave escrita por el get_string existe en el mapa, la función ds_map_find_value() devolverá el valor almacenado en dicha llave. De lo contrario, devolverá <undefined> (sin valor). Puedes usar la función is_undefined() para evitar problemas
Título: Re:ver variable a partir de una string
Publicado por: kostra en Enero 11, 2016, 07:47:28 PM
anotar todas las variables? pfff que palazo, pero weno, gracias xD solucionaten, ahora pásate por mi otro post JAJAJA
Título: Re:[Solucionado] ver variable a partir de una string
Publicado por: bygdle en Enero 11, 2016, 07:52:07 PM
Cita de: kostra en Enero 11, 2016, 07:47:28 PM
ahora pásate por mi otro post JAJAJA
Ño xD

PD: te doy un consejo, a la hora de crear tus juegos, almacena TODAS las variables que serán globales en una ds_map global, como te lo mostré arriba. Esto para poder eliminar las variables globales que no uses de nuevo (cosa imposible de lograr con variables normales), y es más ordenadito y eficiente. O sea, olvídate de poner global.var1, global.var2. Sólo pon global.var[? 'valor1']...

[gml]
global.vars = ds_map_create();
ds_map_add(global.vars,"Perros",irandom(200));
ds_map_add(global.vars,"Gatos",irandom(160));

show_message("Hay " + string(global.vars[? 'Perros']) + " perros y " + string(global.vars[? 'Gatos']) + " gatos.");
[/gml]
Título: Re:[Solucionado] ver variable a partir de una string
Publicado por: kostra en Enero 11, 2016, 08:03:39 PM
quieres que me haga chino? pk me complicas la vida? xD
Título: Re:[Solucionado] ver variable a partir de una string
Publicado por: bygdle en Enero 11, 2016, 08:05:26 PM
Los chinos son cool
Y no te complico la vida, te la facilto XD ;D