Hola, tengo esto en una scrip
draw_self(); // esta función es necesaria para que se dibuje el personaje
draw_text(x-50,y+30,string(Atk)+"/"+string(Vida))
var a
a = "sprnivel" + string(Nivel)
draw_sprite(a,-1,x-50,y-50)
if Turnos>0
{ draw_text(x+25,y-40,string(Turnos))}
En el objeto, en la función DRAW, llama a este scrip.
Pero en draw_sprite(a...) me pone una imagen del propio objeto, no la sprnivel1,en el caso especifico.
Que hago mal. Por descontado que los sprnivel1,2,3, etcc están creados
Cita de: arcangelcaos en Enero 17, 2015, 11:27:53 PM
Que hago mal. Por descontado que los sprnivel1,2,3, etcc están creados
a = "sprnivel" + string(Nivel)
Eso no va a funcionar: Los nombres que les das a los sprites en GM en realidad
apuntan a un índice NUMÉRICO (real). Es decir, que en tu juego, cuando escribes
sprnivel1, GM no toma en consideración el nombre como cadena, sino el índice de sprite asociado a ese recurso (1, 2, 3, etc), por eso los nombres de los recursos aparecen resaltados en color distinto.
La variable a en tu ejemplo, sólo contiene información de tipo string, así que GM no puede usar eso como un índice NUMÉRICO para llamar a un sprite. Lo mismo pasa con las habitaciones, aunque todas tienen un nombre, lo que en realidad GM usa es un índice que se asigna automáticamente al crear cada habitación.
Gracias. Vale. Pero como se hace si no??
Hay varias maneras, pero así sin haberlo probado, sólo pensando un poco, la que más me agrada a mi sería usar un ds_map para almacenar los sprites. Las claves (key) en un dsmap pueden ser de tipo string o real, así que cada par llave-valor en el mapa quedaría como:
key(real): valor (nombre del recurso-sprite)
Entonces para cada llave usaría el nombre de la habitación y en el valor el sprite asociado a esa habitación. Teniendo relacionados cada habitación con su sprite, sería fácil dibujar el sprite correcto. De hecho, creo que la key puede contener tanto un valor de cadena como real, depende de la lógica que uses para referirte a las habitaciones
Usa la función asset_get_index, con la que se puede obtener el indice de un recurso (valor numérico) a partir del nombre (cadena). Cambia la linea [gml]a = "sprnivel" + string(Nivel)[/gml] por esta otra [gml]a = asset_get_index( "sprnivel" + string(Nivel) );[/gml]
En la documentación aparece un ejemplo muy similar a tu código.
Muy buena sugerencia, voy a tomar nota porque no conocía esas funciones asset. Se ve que pueden resultar muy útiles.
Mil gracias, funciona perfecto.