Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Strod en Octubre 08, 2013, 07:35:50 PM

Título: Dibujar un sprite encima de otro.
Publicado por: Strod en Octubre 08, 2013, 07:35:50 PM
Hola  a todos, verán, quiero dibujar encima de un sprite una señal, por ejemplo una equis.

Tengo los objetos en la room,  y quiero que los que selecciones con el boton del ratón se les señale con una 'x', pero el problema es que no logro hacerlo, lo he probado con diferentes funciones (como sprite_index) y me dibuja uno u otro pero nunca los dos superpuestos,¿Cómo puedo lograrlo?. Tengo un sprite que es una equis y quiero que aparezca encima de los sprites que yo quiera dándole con el ratón. Agradeceria ayuda.
Título: Re:Dibujar un sprite encima de otro.
Publicado por: penumbra en Octubre 08, 2013, 08:14:47 PM
Necesitas dos objetos, uno para la equis y otro para el sprite que quieras "tapar" u obstruir.  Al objeto obstruido, en CREATE le asignas una profundidad MAYOR, por ejemplo depth = 100. Al sprite que va encima, le debes asignar una profundidad MENOR, por ejemplo depth = -100.
Título: Re:Dibujar un sprite encima de otro.
Publicado por: Strod en Octubre 09, 2013, 12:03:17 AM
Muchas gracias Penumbra por tu respuesta, pero no sé que función tengo que poner en el evento mouse left press para que se dibuje la equis encima del otro sprite, porque con sprite_index se borra la imagen que está abajo y se queda sólo la 'equis'.

Título: Re:Dibujar un sprite encima de otro.
Publicado por: Wadk en Octubre 09, 2013, 02:12:52 AM
A ver. sprite_index es una variable que todos los objetos tienen, y que se puede definir mediante código, o directamente en el editor de objetos. Los objetos de GM por defecto, cuando no se les da nada que hacer en el evento draw, dibujan el sprite determinado por su variable sprite_index en la posición determinada por sus variables x e y (tomando en cuenta también otras variables como image_index, entre otras).
Si querés que un objeto dibuje dos o más sprites, no vas a poder hacerlo con sprite_index. Lo que podés hacer es colocar código en el evento draw para dibujar ambos sprites:
[gml]draw_sprite(primerSprite, 0, x, y);
draw_sprite(segundoSprite, 0, x, y);[/gml]
(Lo que se dibuja después siempre aparece encima de lo que se dibuja antes.)

Pero en este caso me parece que te va a ser mejor usar dos objetos como dijo penumbra.
Supongo que querés que se pueda hacer click en varios objetos para seleccionar uno. Podés hacer lo siguiente.
Primero creá un objeto y ponele de nombre objSelector. Asignale el sprite de la X y en el evento create, ponele el siguiente código:
[gml]selection = noone;[/gml]
Y en step:
[gml]if (selection == noone) {
    visible = false;
} else {
    x = selection.x;
    y = selection.y;
    visible = true;
}[/gml]
Después creá otro objeto y ponele de nombre objSelectionable. En el evento Mouse>Left Pressed, poné el siguiente código:
[gml]objSelector.selection = id;[/gml]
Luego, para cada objeto que quieras que sea selecionable, fijate donde dice Parent y elejí el objeto objSelectionable.
Por último colocá una instancia del objeto objSelector en la room junto con los objetos seleccionables, y listo, eso debería bastar.
Título: Re:Dibujar un sprite encima de otro.
Publicado por: Strod en Octubre 09, 2013, 05:48:40 PM
Lo he hecho tal y como has dicho Wadk y funciona perfectamente, es justo lo que buscaba, muchas gracias, la verdad que dicen que este programa es sencillo de manejar pero me está costando Dios y ayuda  :-[