Hola a todos, estoy teniendo un pequeño problema que hasta el momento no encuentro la solución. El tema es así, tengo muchas instancias de un objeto en una room y lo que quiero hacer es dibujar la sombra, el método ya sabemos que cada uno se la ingenia para hacerlo pero mi problema es que estoy usando draw_sprite_ext en el evento draw de ese objeto y solo se dibuja en un objeto por vez, cuando este es destruido se dibuja en otro, pero no sé como hacer para que se dibuje en todos, lo único que hago es dibujar el sprite de sombra a la altura del piso moviéndolo en la x del objeto, si alguien sabe como hacerlo se lo voy a agradecer, mientras sigo intentando. Saludos
¿Puedes poner el código que estás usando en el evento DRAW? No entiendo a que te refieres con un objeto por vez. ¿A qué le llamas vez?
draw_sprite_ext(spr_sombrapelota, 0,obj_balon.x,452,1,1,0,c_black,0.5)
Eso lo pongo en el evento DRAW de la pelota, calculo que ahí estará el problema no? tal vez creando otro objeto que se encargue de esto.
Con respecto a una por vez me refiero a lo siguiente, supongamos, en la room hay 5 pelotas y se destruyen al colisionar con un objeto, con mi código una de ellas tiene sombra, si se destruye la que tiene la sombra automáticamente otra aparece con sombra, sea cual sea la cantidad de pelotas siempre hay una sola sombra.
Ah bueno. El problema es que en la función draw_sprite_ext() estás usando UNA SOLA posición para dibujar las sombras (obj_balon.x,452). Internamente, GM está tomando la posición de la primer instancia del objeto balón (aunque haya más), por lo que efectivamente, se dibujan 5 sombras, pero todas en la misma posición, lo que hace que parezca que sólo hay una.
Hay distintas maneras de solucionarlo, por ejemplo, dibujar desde un controlador las sombras
with(obj_balon)
{
//código para dibujar la sombra
}
Así debería ser:
[gml]with(inst){
draw_sprite_ext(spr_inst,-1,x-16,y+16,1,1,0,c_black,0.6)
}[/gml]
Y no así:
[gml]draw_sprite_ext(spr_inst,-1,inst.x-16,inst.y+16,1,0,c_black,0.6)[/gml]
Aqui tienes una mejor opción:
[gml]with(inst){
draw_sprite_ext(sprite_index,image_index,x-16,y+16,image_xscale,image_yscale,image_angle,c_black,image_alpha*0.6)
}[/gml]
Ahora siii, por fin, llevo varias horas con esto, gracias amigos, usé el with como me dijeron y cambié el obj_pelota.x por x para lograr exactamente lo que quería. El código quedó así:
with (obj_balon){
draw_sprite_ext(spr_sombrapelota, 0,x,452,1,1,0,c_black,0.5)
}
Muchas gracias!