Febrero 06, 2010, 01:46:03 AM Ultima modificación: Febrero 12, 2010, 07:38:50 PM por hardraid
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.
   }


?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

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.
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

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

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.

Es un buen script, pero tal parece que no queda bien si el valor de image_speed es distinto a 1.
Vim.

Wadk, lo de image_speed lo aclare en el post. con respecto a lo de la colisiones voy a fijarme y corregir.
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

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.
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

no pongo collision...solo uso place_free para chekear posiciones XD

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.

probaste con ponerlo en "end step"?
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

si,si lo hice pero el error persiste y solo ocurre cuando me muevo y la image_speed es mayor a cero...

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.

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.
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.

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

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.

es raro, lo acabo de probar tal cual y la sombra esta bien, yo lo puse en step al codigo este. q version usas?
?Eres experto en Game Maker y quieres ense?ar lo que sabes? ?nete a nuestro proyecto como tutor. ?Tienes en mente un gran juego pero no sabes como usar Game Maker? Inscr?bete y un tutor te guiar?. Aprender?s dise?ando un juego para luego dise?ar el tuyo propio. Ap?ntate en http://www.comunidadgm.org/index.php?topic=10462.0.


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

Orgulloso veterano de CGM
El poder de hacer un buen juego esta en tus manos.