Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: arcangelcaos en Enero 17, 2015, 11:27:53 PM

Título: Problema con draw sprite SOLUCIONADO
Publicado por: arcangelcaos en Enero 17, 2015, 11:27:53 PM
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
Título: Re:Problema con draw sprite
Publicado por: penumbra en Enero 17, 2015, 11:55:30 PM
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.
Título: Re:Problema con draw sprite
Publicado por: arcangelcaos en Enero 18, 2015, 12:13:38 AM
Gracias. Vale. Pero como se hace si no??
Título: Re:Problema con draw sprite
Publicado por: penumbra en Enero 18, 2015, 12:29:49 AM
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
Título: Re:Problema con draw sprite
Publicado por: Clamud en Enero 18, 2015, 03:21:53 AM
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.
Título: Re:Problema con draw sprite
Publicado por: penumbra en Enero 18, 2015, 03:39:03 AM
Muy buena sugerencia, voy a tomar nota porque no conocía esas funciones asset. Se ve que pueden resultar muy útiles.
Título: Re:Problema con draw sprite
Publicado por: arcangelcaos en Enero 18, 2015, 11:11:16 AM
Mil gracias, funciona perfecto.