Hola a todos, a estas alturas sigo utilizando el Gamemaker8 a pesar de que también tengo el GM:S instalado. Pero la verdad es que ya se me empiezan a hacer importantes ciertas novedades del GM:S como el tema de la exportación a diferentes plataformas entre otras cosas, y ya quiero pegar el salto. Pero hay cierta función del GM8 que el GM:S no tiene y que para mi es realmente elemental y es básicamente la razón por la que me he quedado anclado. Estoy hablando del execute_string()
Para lo que generalmente uso el execute_string es para evitar escribir codigos larguisimos y repetitivos en los que no sé hasta que variable ni cuantas voy a estar testeando. Por ejemplo:
a=10
execute_string('draw_sprite(sprite'+a+',0,x,y)')
Como pueden ver lo que hace este código es dibujar un sprite según el valor de la variable a (que en este caso sería el sprite10), de manera súper simple y sin tener que escribir un código infinito con todas las posibilidades que podria tener la variable a y todas los sprites creados que en mis juegos suelen ser cientos.
o por ejemplo
Citara=10
execute_string('global.b'+a+'=20')
Este por ejemplo hace que según el valor de a, hace que una hipotética variable, tenga de nombre 'global.b' y al final se le agrega el valor que tenga a pero como string, o sea que la variable queda con nombre 'global.b10' y a esa variable además se le da el valor de 20.
Ven que es todo muy lindo?, pero cómo rayos se puede hacer esto en el GM:S si no posee la función esta, digo, entiendo que el GM:S no quiere tener funciones del tipo 'on the fly' pero, lo que yo quiero acá no es algo muy de la idea editable 'on the fly' sino más bien un asunto de evitar tener que escribir un código tan largo.
Gracias de antemano.
Para el primer ejemplo, una alternativa es el uso de la función asset_get_index
[gml]
a = 10;
b = asset_get_index( "sprite" + string(a) );
draw_sprite( b,0, x,y );
[/gml]
Para el segundo ejemplo se puede usar un arreglo o una lista
[gml]
a = 10;
global.b[a] = 20;
[/gml]
Cita de: Clamud en Abril 29, 2015, 05:28:35 AM
Para el primer ejemplo, una alternativa es el uso de la función asset_get_index
[gml]
a = 10;
b = asset_get_index( "sprite" + string(a) );
draw_sprite( b,0, x,y );
[/gml]
Para el segundo ejemplo se puede usar un arreglo o una lista
[gml]
a = 10;
global.b[a] = 20;
[/gml]
Gracias, está buenisimo aprendí cosas.
En el segundo ejemplo vi que esa es una buena forma de ennumerar variables o por el estilo, pero hay una forma como de agregar una palabra (string) o caracteres al nombre de una variable, al menos cuando esta es creada?
¿Te refieres a que se acceda a la variable por medio de una cadena?
Lo único que se me ocurre es usar ds_maps, en los que se pueden definir "llaves" que pueden ser cadenas o números reales y asignarles valores que también pueden ser cadenas o reales. Ejemplo:
[gml]
//Crear mapa
b = ds_map_create();
//Asignar valores
a = 10;
b[?a] = 20.3;
b[?"entero"] = 7;
b[?"cadena"] = "hola";
//Leer valores
valor = b[?10];
digito = b[?"entero"];
palabra = b[?"cadena"];
[/gml]