Buenas a todos.

Utilizo ,en el evento draw de un objeto controlador, una llamada para mostrar una interfaz, de 5 disponibles, cada una con su sprite correspondiente.

¿Cómo puedo llamar en el draw_sprite_ext, el sprite correspondiente según la variable global.interfaz?

Es decir: si la variable global.interfaz es 1, quiero  el interfaz1_spr, si es 2, el interfaz2_spr...

He probado con string pero no aparece...

draw_sprite_ext(string("interfaz" + global.interfaz  + "_spr") ,0,3,3,1,1,0,c_white,1)

Deberias calcular antes en el create la variable a dibujar, algo como
[gml]execute_string("spr=interfaz"+global.interfaz+"_spr")[/gml]
y luego dibujas spr




Cita de: Texic en Septiembre 27, 2013, 07:21:13 PM
Deberias calcular antes en el create la variable a dibujar, algo como
[gml]execute_string("spr=interfaz"+global.interfaz+"_spr")[/gml]
y luego dibujas spr
Hombre, es gm:studio  :P.

Mira francordoba el nombre de un sprite es una variable (en realidad constante) que almacena un numero llamado sprite_index, así que solo escribir el nombre de un sprite como un string no va hacer que mágicamente esté devuelva el valor del sprite_index. En gm8 se podía como lo ha dicho texic (a pesar de que era MUY lento y apestoso xD).

Mi recomendación personal es que uses un array, es mucho más eficiente y quizá hasta ahorras algo de tiempo. Algo así:

ev_create de algún objeto controlador que esté se cree antes que el objeto interfaz.
[gml]
global.arrayInterfaz[0]="interfaz0_spr";
global.arrayInterfaz[1]="interfaz1_spr";
global.arrayInterfaz[2]="interfaz2_spr";
global.arrayInterfaz[3]="interfaz3_spr";
global.arrayInterfaz[4]="interfaz4_spr";
[/gml]

Y luego para dibujar el sprite haces esto.
[gml]draw_sprite_ext(global.arrayInterfaz( global.interfaz ) ) ,0,3,3,1,1,0,c_white,1)[/gml]

El segundo método sustituye perfectamente el uso de execute_string como lo usó texic, además es mucho más eficiente incluyendo en gm8, increíblemente aveces acceder a una variable común en gm8 puede llegar a ser menos eficiente que acceder a un mapa (he hecho pruebas).

El principio es algo pesado y de hecho algo problemático a veces, si tienes muchos sprites puede tardar algo.

Ev create obj control.
[gml]
global.spriteMap=ds_map_create();
///Ese 1000 cambíalo por un numero algo mayor al numero de sprites que tienes.
for(var i=0; i<1000; i++){
     if sprite_exists(i){
          ds_map_add(global.spriteMap, sprite_get_name(i), i);
     }
}
[/gml]

Y luego puedes crear un script. algo como esto.
[gml]
///sprite_string
ds_map_find_value(global.spriteMap, argument0);
[/gml]

Y luego, finalmente:
[gml]draw_sprite_ext(sprite_string( "interfaz" + string( global.interfaz )  + "_spr") ,0,3,3,1,1,0,c_white,1);[/gml]

Suerte  ;).

Gracias a los dos, probé el primer método y no funcionó como bien dijo Bruno. Al final cambie la forma de llamar al sprite y no tuve que liar tanto berengenal para que saliera una "carita "  :-[.

Muchas gracias.