Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Heartgleam en Septiembre 30, 2017, 01:30:43 AM

Título: Añadir caracteres a el nombre de la variable
Publicado por: Heartgleam en Septiembre 30, 2017, 01:30:43 AM

prt_added=1110
var ("prt"+string_copy(prt_added,2,2))=prt_added


quiero que quede
prt11=1110

pero no se como hacerlo, me da error si lo intento ???
Título: Re:Añadir caracteres a el nombre de la variable
Publicado por: bygdle en Septiembre 30, 2017, 01:56:57 AM
No se puede. La mejor solución sería usar mapas.
Título: Re:Añadir caracteres a el nombre de la variable
Publicado por: Void en Septiembre 30, 2017, 02:23:59 AM
Por supuesto que te da error, ese código no tiene ni pies ni cabeza. En primer lugar no puedes usar strings directamente para nombrar variables, en segundo prt_added tiene valor real, asi que las funciones de string no van a funcionar en con él sin primero transformarlo.

Ahora bien, es posible crear variables al vuelo a partir de strings, pero requiere usar las funciones apropiadas, y se pueden crear solo de rango global o de instancia, no locales como quieres hacer en el código que muestras, por lo que coincido con NiuWeb, si de verdad requieres que el valor sea asignado con esa identificación lo mejor seria utilizar un mapa y destruirlo al final del código.

Para el ejemplo que pones el código seria así:

[gml]
var Mapa = ds_map_create()

prt_added=1110
var ("prt"+string_copy(prt_added,2,2))=prt_added

Mapa[? "prt"+string_copy(string(prt_added),2,2)] = prt_added
[/gml]

Y para acceder al valor seria con Mapa[? "prt11"] por ejemplo:

[gml]Variable = Mapa[? "prt11"]
Mapa[? "prt11"] += 1000[/gml]

Y al final del código o evento (dependiendo si estas usando scripts o bloques de código) destruir el mapa.

[gml]ds_map_destroy(Mapa)[/gml]
Título: Re:Añadir caracteres a el nombre de la variable
Publicado por: Heartgleam en Septiembre 30, 2017, 04:03:39 PM
muchas gracias, ya decía yo que me había inventado algo :-[ :-[
Lo he probado y funciona perfectamente, gracias :) :) :)