Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: millansoft en Diciembre 02, 2015, 04:06:38 AM

Título: Conseguir valor de la variable desde un string
Publicado por: millansoft en Diciembre 02, 2015, 04:06:38 AM
Hola,

Se me dio una situacion en la cual podria ahorrar cientos de lineas de codigo por lo que veo, o eso creo.

Tengo una serie de variables por ejemplo asi:

rival0 = 80;
rival1 = 34;

Y trate de hacer algo asi:

for (i = 0; i < 78; i++)
    {rival = "rival" + string(i);
    script_execute(rivales);}


O sea que el valor de la variable rival termine siendo el valor de la variable rival00, pero me aparece un error de ejecucion y estoy casi seguro es que porque en lugar de aplicarle el valor de rival0, le deja el string "rival0" a la variable rival.

Hay forma de que le deje el valor y no el string?

Gracias!
Título: Re:Conseguir valor de la variable desde un string
Publicado por: bygdle en Diciembre 02, 2015, 04:15:08 AM
No entiendo del todo que es lo que pretendes hacer. Tu código va a reemplazar los valores en la misma variable, y al final del ciclo tendrás una sola variable así:
[gml]
rival = "rival77";
[/gml]

Si lo que quieres es que guarde muchas variables, por ejemplo, así:
[gml]
rival1 = 0;
rival2 = 1;
...
[/gml]
Usa los arrays. Sólo debes hacer esto:
[gml]
for(i=0;i<78;i++)
{
   rival = i;
}
[/gml]
Eso va a crear una serie de 78 arrays que se pueden ver algo así:
[gml]
rival[0] = 0;
rival[1] = 1;
rival[2] = 2;
......
[/gml]

Y estos arrays se pueden usar igual que una variable, por ejemplo, puedes hacer:
[gml]
draw_text(32,32,string(rival[10]));
[/gml]

Sin problema alguno :D
Espero te ayude
Título: Re:Conseguir valor de la variable desde un string
Publicado por: millansoft en Diciembre 02, 2015, 04:21:50 AM
Hola,

Gracias por responder pero no es eso, necesito que la variable rival tenga el valor de la variable rival0, ejecutar un script con ese valor en rival, luego rival el valor de la variable rival1, ejecutar de nuevo el script y asi 78 veces. Pero me queda el string "rival0" y no el valor de rival0 que es lo que busco, se podra hacer eso?

Saludos
Título: Re:Conseguir valor de la variable desde un string
Publicado por: bygdle en Diciembre 02, 2015, 04:32:29 AM
Entonces es lo mismo, ya que no puedes crear una variable como string. Más detalladamente, no puedes hacer esto:
[gml]
"rival1" = 3;
[/gml]
Con eso es decir mucho :D
Lo puedes hacer como te digo, usando arrays. Por ejemplo, al inicio, en vez de poner rival1, rival2, rival3; pon rival[1],rival[2],rival[3]...Te explico:
[gml]
rival[1] = 32;
rival[2] = 66;
rival[3] = 70;
//......

for(i=1;i<=78;i++) //Procura comenzar el ciclo en uno y que sea menor que 79, o menor e igual a 78.
{
  rivall = rival; //Recuerda que el array y la variable normal deben ser diferentes para evitar problemas :D
  rivales(); //Ejecutas tu script
}
[/gml]
Título: Re:Conseguir valor de la variable desde un string
Publicado por: penumbra en Diciembre 02, 2015, 07:37:17 AM
Cita de: millansoft en Diciembre 02, 2015, 04:06:38 AM
Hay forma de que le deje el valor y no el string?
Como lo pretendes realizar, no. Analizando tu código:
[gml]rival = "rival" + string(i);[/gml]
Lo que hace es que la cadena "rival" se concatena con la cadena string(i). Por ejemplo, en la primera iteración del ciclo, del lado derecho de la igualdad se tiene "rival0".

La cadena "rival0" es precisamente, una cadena, no una variable. No hay relación (para GM) entre "rival0" y la variable rival0. Es cierto que lucen similares, ambas aparentemente están compuestas por los mismos caracteres, pero para GM son cosas distintas. Para GM, "rival0" es una serie de caracteres ascii (o utf-8), mientras que rival0 es un identificador que apunta a una dirección de memoria.

Fíjate que incluso en el editor de GM, el color de una cadena "valor0" es distinto al color de una variable valor0, para ayudar a diferenciar su "naturaleza".

Lo más sencillo es que uses arreglos, como te sugirió NiuWeb. Si eres de los que no se conforman con el método más sencillo, entonces, sí hay una manera para que, variando el sufijo numérico de una cadena puedas acceder a un valor guardado: Mapas.

Los mapas almacenan información basándose en un esquema clave-valor. Las claves en un mapa pueden ser cadenas, por lo que un mapa puede tener una estructura
"rival0": 84
"rival1": 34
"rival2": 50

Entonces, aquí sí que es posible usar el truco
[gml]"rival" + string(i)[/gml]
para recorrer el mapa, modificando el valor de i. Las claves de los mapas también pueden ser números, y como en GMS ahora hay "accessors", casi no hay diferencia entre manejar mapas y manejar arreglos (desde el punto de vista de facilidad de uso, no digo que sean la misma cosa)
Título: Re:Conseguir valor de la variable desde un string
Publicado por: millansoft en Diciembre 02, 2015, 02:14:26 PM
Hola,

Gracias por la ayuda, ya lo resolvi con un array, pero igual me habia quedado la duda de si se podia hacer lo que les preguntaba, porque recordaba haber leido un libro de C++ y en una situacion similar habia una forma no muy complicada de hacerlo recuerdo, pero como lo lei hace años y el C++ nunca lo termine usando en nada, ya no recuerdo bien.

Saludos!
Título: Re:Conseguir valor de la variable desde un string
Publicado por: ferhand en Diciembre 02, 2015, 09:10:56 PM
       Saludos Makeros:

Makero millansoft y makero penumbra, en realidad sí hay una forma de llamar a una variable de manera dinámica.   :-[

En estos momentos no tengo GM aquí en el trabajo, pero existen unas funciones con las cuales se pueden generar variables, "cuasi", en tiempo real. Dichas funciones no solo crean variables sino que las abren para su lectura y escritura.    :-[

Recuerdo que para un proyecto, utilizando GM, las empleé mucho. Mañana, en cuanto lea el manual otra, colocaré sus nombre y algún ejemplo de uso...   :-[

Aun así, la forma que el makero millansoft quiere realizar llamados a dichas variables puede realizarse de otra manera y ahorrar líneas código, que era su intención inicial, creo.   ???

Espero haber servido de algo...   ;D
Título: Re:Conseguir valor de la variable desde un string
Publicado por: bygdle en Diciembre 02, 2015, 09:30:39 PM
Tengo entendigo que en GM8 existen dichas funciones, pero ¿En GMS también? Lo último que recuerdo haber leído, no sé en donde, que en GMS se habían eliminado estas funciones. Y por el ícono del tema podemos inferir que el problema es en GMS ¿no?