Creador: hardraid
Version GM: :GM8: :GM7: :GM6:
Descripci?n: Varios de ustedes ya conocieron mi antiguo post sobre sombras con particulas pero no estaba tan afinado :P ahora aprovechando que mi post ya no esta voy a mostrar una version actualizada, requiere un solo script y no dos como el anterior, es mas rapido, y lo mas importante dibuja la sombra de los sprites animados a diferencia del anterior que era estatico. Les dejo un ejemplo adjunto.
Modificacion 2.01:Se a agregado una condici?n para que en los casos que el sprite no tenga velocidad, no dibuje la animacion de la sombra. lamentablemente no encontre la forma de variar la velocidad de animacion de las particulas. Tambien se a establecido una profundidad menor a la del objeto, por defecto es asi si el objeto tiene la profundidad por defecto, pero en caso contrario no, con esto se soluciona.
ATENCION: En el evento destroy colocar:part_system_destroy(sis_sombra);//para elimianr el sistema de particulas y librar la memoria utilizada.
Tambien coloquen el codigo en el evento "End Step" despues de cualquier otra funcion.
Codigo:
//scr_sombra(alpha,escala);
//1? argumento: para ponerle la transparencia de la sombra, lo normal seria 0.5.
//2? argument2: para ponerle la escala(tama?o) de la sombra, 1 equivale al tama?o normal.
if!(variable_local_exists('sis_sombra'))//si no existe el sistema de particulas...
{
sis_sombra=part_system_create();//creamos sistema de particulas.
part_system_depth(sis_sombra,depth+1);//profundidad menor a la del objeto.
sombra=part_type_create();//creamos el tipo de particula.
emi_sombra=part_emitter_create(sis_sombra);//creamos el emisor.
}
part_type_sprite(sombra,sprite_index,1,0,0);//la particula va a ser el sprite actual.
part_type_color1(sombra,c_black);//indicamos color negro.
part_type_alpha1(sombra,argument0);//indicamos transparencia
part_type_scale(sombra,argument1,argument1);//escala un poquito mas grande q el sprite normal.
part_type_orientation(sombra,image_angle,image_angle,0,0,0);//angulo de la particula igual al del sprite.
if(image_speed){//si la imagen tiene velocidad...
part_type_life(sombra,image_number,image_number);//la duracion sera igual a la duracion del sprite.
}else{
part_type_life(sombra,1,1);
}
part_type_death(sombra,1,sombra);//cuando se muere crea otra.
sp=point_distance(xprevious,yprevious,x,y);//obtenga la velocidad en base a su posicion por steps.
part_type_speed(sombra,sp,sp,0,0);//establecemos la velocidad.
dir=point_direction(xprevious,yprevious,x,y);//obtenemos la direccion en base a la coordenadas de cada step.
part_type_direction(sombra,dir,dir,0,0);//establecemos la dreccion.
if(part_emitter_exists(sis_sombra,emi_sombra)){//si existe el emisor...
part_emitter_region(sis_sombra,emi_sombra,x+2,x+3,y+2,y+3,ps_shape_rectangle,ps_distr_linear);//indicamos la region donde se crearan las particulas.
part_emitter_burst(sis_sombra,emi_sombra,sombra,1);//iniciamos el emisor.
part_emitter_destroy(sis_sombra,emi_sombra);//destruimso el emisor.
}
Lo acabo de probar.
Excelente script Hardraid. Funcional, efectivo y muy facil de implementar.
gracias Fenris... acabo de realizar una peque?a modificacion, los detalles esta estan en el post.
Me parecio bastante interesante...pero al collisionar con una pared la sombra sigue andando XD
Te adjunto una imagen de mi proyecto cuando intente implementar el script
Es un buen script, pero tal parece que no queda bien si el valor de image_speed es distinto a 1.
Wadk, lo de image_speed lo aclare en el post. con respecto a lo de la colisiones voy a fijarme y corregir.
bueno no vi ese problema que tenes vos kakashigna, a lo mejor haras mal la colision, si queres mostrame el trozo de codigo donde haces la colision, y por las dudas te recomiendo que lo uses en "end step" voy a ponerlo en el post asi lo usan siempre asi uqe es mejor.
no pongo collision...solo uso place_free para chekear posiciones XD
probaste con ponerlo en "end step"?
si,si lo hice pero el error persiste y solo ocurre cuando me muevo y la image_speed es mayor a cero...
la image_speed de cualquier forma no afecta eso, image_speed tiene q set 0 o el valor por defecto del sprite. mostrame el trozo de codigo q pones en el place_free.
if keyboard_check(key_up) and place_free(x,y-velocidad)
{
y-=velocidad
}
if keyboard_check(key_left) and place_free(x-velocidad,y)
{
x-=velocidad
}
if keyboard_check(key_right) and place_free(x+velocidad,y)
{
x+=velocidad
}
if keyboard_check(key_down) and place_free(x,y+velocidad)
{
y+=velocidad
}
Velocidad varia pero normalmente es 4
es raro, lo acabo de probar tal cual y la sombra esta bien, yo lo puse en step al codigo este. q version usas?
Cita de: hardraid en Febrero 12, 2010, 07:23:36 PM
Wadk, lo de image_speed lo aclare en el post.
Ah, mal yo xD.
he debugeado el script en mi juego un rato y ya vi exactamente donde sale el error...Cuando en mi juego golpeo con el palo(osea hay animacion) y a la vez me muevo y dejo de moverme la sombra no se deja de mover imediatamente y por eso pasa de largo...Todavia no he leido el code del script pero ver que puede ser MMM despues de que lo estudie un poco...
salu2
bien, tenes razon hay varios bug q en visto con respecto a diferentes movimientos, voy a ver como lo arreglo.
tengo el mismo error que tiene kakashigna ???