Marzo 10, 2014, 11:03:44 PM Ultima modificación: Marzo 11, 2014, 11:35:30 PM por seed86
 :GMS:

Hola a todos, estoy haciendo un juego plataformas 2D estilo al Ghouls & Goblins y me gustaría hacer que cuando un enemigo muera dibujase una animación de una explosión de sangre o de una llama de fuego como en el Maldita castilla:
http://www.youtube.com/watch?v=3jcp0caeRso

Esto sabría hacerlo teniendo la sangre como un objeto aparte e indicando al objeto_enemigo que lo cree al destruirse, pero me interesa economizar el número de objetos del proyecto y quiero que se dibuje el sprite sin necesidad de crear un objeto aparte con el sprite.

De igual manera estoy teniendo problemas para dibujar el sprite de  animación de salpicadura de sangre cuando el enemigo recibe un impacto de una lanza.


En Step:

if (hp<=0)
{
  death=1
  instance_destroy();
}


En Draw
if death
{
  draw_sprite_ext(spr_blood_splat2,0,x,y,1,1,0,c_white,1);  //draw blood explosion
  image_index+=1;
}


QUien me ayude se gana salir en los créditos si lo desea. Gracias y un saludo!


Gracias pero en ese video indica como hacerlo mediante objetos independiente del enemigo. De esa manera sabría hacerlo pero quiero que sea el enemigo quien dibuje estas animaciones.

Cita de: seed86 en Marzo 10, 2014, 11:35:37 PM
Gracias pero en ese video indica como hacerlo mediante objetos independiente del enemigo. De esa manera sabría hacerlo pero quiero que sea el enemigo quien dibuje estas animaciones.

Ok, para comenzar, tu codigo en si funciona erroneo xDD

if (hp<=0)
{
  death=1
  instance_destroy();
}


if death
{
  draw_sprite_ext(spr_blood_splat2,0,x,y,1,1,0,c_white,1);  //draw blood explosion
  image_index+=1;
}


El instance destroy destruye el objeto, asi que el evento draw no servira....... Utilizo el GM8 pero creo que servira en GMS, y de no serlo te haras una idea sencilla de como hacerlo :D

Step Event
if hp<=0
{
  death=1
  deathani+=1
}


Draw Event
if death=1
{
  draw_sprite_ext(spr_blood_splat2,deathani,x,y,1,1,0,c_white,1);  //draw blood explosion
  if deathani>=5 instance_destroy() //Cambia el 5 por el numero de imagenes de el sprite de sangre
}


Si no me equivoco eso estaria bien, Aunque prefiero crear una instancia para la sangre xDD

O, como tu tenias el image en el draw, haz esto:

Step Event
if hp<=0
{
  death=1
}


Draw Event
if death=1
{
  draw_sprite_ext(spr_blood_splat2,deathani,x,y,1,1,0,c_white,1);  //draw blood explosion
  if deathani>=5 instance_destroy() //Cambia el 5 por el numero de imagenes de el sprite de sangre
  deathani+=1
}


Espero que te sirva ;P

Muchas gracias por tu post tan bien explicado, pero de esta manera la sangre se dibuja sobre el enemigo antes de que desaparezca, ademas puede seguir infringiendo daño si lo tocas durante esos 5 frames antes de que la animacion de la sangre termine. Creo que tendré que hacerlo usando un objeto para este caso.
Quizás tu método me sirva para la sangre que se dibuja cuando impacta un proyectil con el enemigo. Voy a probar


te va a ser mas recomendable usar surfaces. fijate en la parte de tutoriales del studio que aparece un "surface tutorial" que matas a unos esqueletos y queda la sangre y los huesos donde murio

#7 Marzo 11, 2014, 06:26:25 AM Ultima modificación: Marzo 11, 2014, 07:00:55 PM por Killer
Puedes usar partículas, haces una partícula que tenga el sprite del efecto, le pones el tiempo de vida que quieres que dure, y la creas cuando el enemigo muere, como las partículas son controladas desde el sistema al que pertenecen y no desde el objeto donde fue creada la partícula continuara existiendo hasta que se acabe su vida.

Edit: Oops, no me fije que no habías puesto el icono del GM que usas en el título tema, haznos un favor y ponlo, o todos los que contestamos estaremos en falta a las reglas.

Cita de: seed86 en Marzo 11, 2014, 01:31:59 AM
Muchas gracias por tu post tan bien explicado, pero de esta manera la sangre se dibuja sobre el enemigo antes de que desaparezca, ademas puede seguir infringiendo daño si lo tocas durante esos 5 frames antes de que la animacion de la sangre termine. Creo que tendré que hacerlo usando un objeto para este caso.
Quizás tu método me sirva para la sangre que se dibuja cuando impacta un proyectil con el enemigo. Voy a probar
Bueno, tienes que cambiar codigo....
Pon algo asi:
if death=0
{
Todos los codigos tienen que estar asi, osea, el enemigo solo sera afectado cuando no este muerto, con la variable death
}


Es que no dijiste todos los codigos xDD, simplemente seria algo asi:
if death=0
{
if Bullet.x<=x {hp-=1 with other instance_destroy()}
if Bullet.x>=x {hp-=1 with other instance_destroy()}
}


O algo por el estilo xDD

Cita de: gortz en Marzo 11, 2014, 01:41:57 AM
creo que usar decals es mas recomendable
No sabia que eran decals xDD (Lo busque y aun sigo sin saber xDD)

Cita de: ivn_eze en Marzo 11, 2014, 02:11:47 AM
te va a ser mas recomendable usar surfaces. fijate en la parte de tutoriales del studio que aparece un "surface tutorial" que matas a unos esqueletos y queda la sangre y los huesos donde murio
Si el no puede hacer algo tan simple, crees que sepa usar surfaces? (Yo si acaso se hacer un 5% de su potencial Y_Y), no trato de ofender... Ademas, que hay de el rumor de que las surfaces ralentizan al sistema? ;P

Cita de: Killer en Marzo 11, 2014, 06:26:25 AM
Puedes usar partículas, haces una partícula que tenga el sprite del efecto, le pones el tiempo de vida que quieres que dure, y la creas cuando el enemigo muere, como las partículas son controladas desde el sistema al que pertenecen y no desde el objeto donde fue creada la partícula continuara existiendo hasta que se acabe su vida.

Edit: Oops, no me fije que no habías puesto el icono del GM que usas en el título tema, haznos un favor y ponlo, o todos los que contestamos estaremos en falta a las reglas.
PARTICULAS!!!!!!!!!!, soy buenas pero, NPI de como hacerlas Y_Y


Creo que la mejor forma es usando un sprite para la sangre y nque se cree cuando se destruya el objeto enemigo, ya que si utilizas draw te va a consumir casi más recursos que un objeto. Si quieres economizar objetos, puedes hacer que se destruyan al salir de la vista o cuando tu quieras (si no quieres que sean persistentes...)

saludos
Fan de los retro-juegos 2D, arcades, plataformas. Programador. Amiga and MSX fan