Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Efecto de desintegración  (Leído 7004 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mega G

  • Guinxu
  • Adicto
  • *
  • Puntos: 599
  • Mensajes: 391
  • Agradecido: 3 veces
  • Sexo: Masculino
  • Feliz por haber desarrollado un RPG de 30 horas :)
    • Ver Perfil
    • Guinxu.com - ¡Mis proyectos!
en: Abril 06, 2014, 07:33:32 pm
Efecto de desintegración

-Autor: Mega-G
-Explicación: Hace explotar un sprite y lo descompone en muchos píxeles.

Añado un vídeo que hice para mi página pero que os mostrará como se ve el efecto:
(mirad hasta el minuto 0:30, luego ya es otra cosa).

[youtube]http://www.youtube.com/watch?v=pniEekhRUBY[/youtube]

-Versiones: GM7, GM8 y GMStudio

-Scripts:


crear_cuadricula(size) (size es un entero que divide sprite_width y sprite_height).
(por ejemplo si el sprite mide 128x128, las size que puedes poner serían 1,2,4,8,16,32,64)

Este script irá en el evento <Create>:

Código: [Seleccionar]
size=argument0
for(i=0; i<=sprite_width; i=i+1*size)
{
for(j=0; j<=sprite_height; j=j+1*size)
{
px[i,j]=i
py[i,j]=j
}
}

Lo que hace es crear una cuadrícula formada por bloques. Cada bloque es cuadrado y su lado corresponde al valor del argument0. Cuanto más pequeño es el argument0 más realista queda ya que habrá más bloques. Pero consumirá más recursos y puede que el juego ralentice.

dibujar_efecto(desintegrarse) (desintegrarse es un boolean. Cuando vale true empieza la animación. Si vale false la pausas.)
Este script irá en el evento <Draw>

Código: [Seleccionar]
desintegrarse=argument0
for(i=0; i<=sprite_width; i=i+1*size)
{
for(j=0; j<=sprite_height; j=j+1*size)
{
draw_sprite_part(sprite_index,image_index,i,j,size,size,x+px[i,j],y+py[i,j])

if desintegrarse=true
{
px[i,j]-=cos(degtorad(point_direction(x+i,y+j,x+sprite_width/2,y+sprite_height/2)))*(5+random(10))
py[i,j]+=sin(degtorad(point_direction(x+i,y+j,x+sprite_width/2,y+sprite_height/2)))*(5+random(10))
}

}
}

Aquí dibuja cada uno de esos bloques creados en el primer script. Y cuando desintegrarse vale true, aleja cada bloque del centro.
Para alejarlos mide la dirección entre cada punto y el centro del sprite (x+sprite_width/2 , y+sprite_height/2) y mueve cada bloque usando las funciones trigonométricas sin y cos.


El ejemplo del vídeo lo podéis bajar aquí: http://guinxu.com/downtut.php?link=17.
(Lo que pasa que no está en script, lo he puesto "a lo bruto" en los eventos <Create> y <Draw>).
Es un editable de GM7 pero lo podéis importar a GM8 y GMStudio sin problemas, lo he comprobado y todo es compatible.


Espero que le sirva a alguien, y a ver si lo veo en algún juego jeje. Sois libres de utilizarlo.
Cualquier duda que tengáis sobre el script os leeré e intentaré resolverla.

Un saludo!


>Mi web

>Anuncio publicitario
de Gemdow Quest


/!\¿Quieres saber cómo trabajo?

Descarga Gemdow Quest
completo (30 horas de aventura):
Aquí
 
Los siguientes usuarios dieron las gracias a este tema: elmmertonw


No Tienes Permisos Para Dar Puntos
point 64 Puntos

Usuarios que puntuaron el tema » vampy09 (7 Pts) » Black_Cat (3 Pts) » knd144 (10 Pts) » Markus (8 Pts) » Johann (5 Pts) » Daz (5 Pts) » eduardo960 (5 Pts) » venus (3 Pts) » DHX (5 Pts) » Clamud (8 Pts) » elmmertonw (5 Pts) 


Desconectado vampy09

  • Asiduo
  • *
  • Puntos: 289
  • Mensajes: 247
  • Sexo: Masculino
    • Ver Perfil
Respuesta #1 en: Abril 07, 2014, 05:33:24 am
Excelente aporte!

The next best thing to knowing something,
is knowing where to find it.
 


Desconectado petpan13

  • Asiduo
  • *
  • Puntos: 373
  • Mensajes: 238
  • Sexo: Masculino
    • Ver Perfil
Respuesta #2 en: Abril 07, 2014, 08:56:21 pm
yo lo hice con gif si lo hubiera tenido jejej muy buen aporte

 


Desconectado abramelin

  • Adicto
  • *
  • Puntos: 455
  • Mensajes: 304
  • Sexo: Masculino
    • Ver Perfil
Respuesta #3 en: Abril 07, 2014, 09:15:58 pm
que chulo! lo probare se ve un buen efecto

 


Desconectado Marth

Respuesta #4 en: Mayo 09, 2014, 12:37:24 am
¡Esta muy bien!
Aunque es bastante compleja la formula. ¡De la de conceptos que aprendí de repente miranto tu script! ;D

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-
 


Desconectado beto2789

  • Habitual
  • *
  • Puntos: 57
  • Mensajes: 25
  • Sexo: Masculino
    • Ver Perfil
Respuesta #5 en: Mayo 11, 2014, 02:47:57 am
Gracias por el aporte (Y)
 :GMS:
« última modificación: Mayo 11, 2014, 02:49:28 am por beto2789 »

 


Desconectado perfidus

  • Visitante
  • *
  • Puntos: 23
  • Mensajes: 9
    • Ver Perfil
Respuesta #6 en: Mayo 31, 2014, 12:28:11 pm
Y como seria para un objeto rectangular?

Excelente efecto

 


Desconectado Mega G

  • Guinxu
  • Adicto
  • *
  • Puntos: 599
  • Mensajes: 391
  • Agradecido: 3 veces
  • Sexo: Masculino
  • Feliz por haber desarrollado un RPG de 30 horas :)
    • Ver Perfil
    • Guinxu.com - ¡Mis proyectos!
Respuesta #7 en: Mayo 31, 2014, 01:02:04 pm
Y como seria para un objeto rectangular?

Excelente efecto

Perdona no entiendo tu pregunta. El sprite que utilizo ya es rectangular, como todos los sprites.
Si me lo explicas más intentaré adaptar el script para tu caso.


>Mi web

>Anuncio publicitario
de Gemdow Quest


/!\¿Quieres saber cómo trabajo?

Descarga Gemdow Quest
completo (30 horas de aventura):
Aquí
 


Desconectado zorge

Respuesta #8 en: Junio 09, 2014, 11:55:51 pm
hey mega me podrias explicar como funciona en si??es que he hecho un sprite pero me queda descuadrado y me dibuja cosas que no deberia y necesitaria saber como funciona en general y como poder adaptarlo,espero no sea mucha molestia me parece un aporte impresionante que no esta aprovechado lo suficiente y me gustaria poder usarlo en mi proyecto al 100%

 


Desconectado Mega G

  • Guinxu
  • Adicto
  • *
  • Puntos: 599
  • Mensajes: 391
  • Agradecido: 3 veces
  • Sexo: Masculino
  • Feliz por haber desarrollado un RPG de 30 horas :)
    • Ver Perfil
    • Guinxu.com - ¡Mis proyectos!
Respuesta #9 en: Junio 10, 2014, 10:36:36 pm
hey mega me podrias explicar como funciona en si??es que he hecho un sprite pero me queda descuadrado y me dibuja cosas que no deberia y necesitaria saber como funciona en general y como poder adaptarlo,espero no sea mucha molestia me parece un aporte impresionante que no esta aprovechado lo suficiente y me gustaria poder usarlo en mi proyecto al 100%

Si te queda descuadrado supongo que será porque el xorigin y el yorigin del sprite no están en el punto (0,0).

En cuanto al funcionamiento del script ahora te lo explico:

En el evento <Create> define las coordenadas x,y de cada "partícula" de la desintegración. Las llamamos px y py. Y para diferenciarlas tienen 2 subíndices, que corresponden a las coordenadas de su posición inicial.

Luego en el evento <Draw> dibujamos cada uno de esos trozos en su posición px y py que de momento coincide con su posición inicial. Hasta que empieza la desintegración, entonces cada una de esas partículas se mueve en la dirección entre su posición actual y la del centro del sprite, en sentido opuesto para que vaya hacia fuera.

El cosinus corresponde a la cordenada horizontal y el sinus a la vertical. pero funcionan en radianes, por lo que usamos la función degtorad para convertir el ángulo que viene en grados desde la función point_direction.


Ha sido un poco complicado de explicar y hay matemáticas un poco complicadas.
Espero haberme hecho entender, si te ha quedado alguna duda dímelo.

Un saludo!


>Mi web

>Anuncio publicitario
de Gemdow Quest


/!\¿Quieres saber cómo trabajo?

Descarga Gemdow Quest
completo (30 horas de aventura):
Aquí
 


Desconectado zorge

Respuesta #10 en: Agosto 14, 2014, 02:38:48 am
hey genial la explicacion igual que genial el efecto al principio me ha costado un poco entenderlo pero creo que ya lo cojo voy a hacer alguna pruebas y te dire como me quedo muchisimas gracias por la explicacion y por este maravilloso efecto espero poder usarlo.

 


Desconectado chichoterremoto

  • Visitante
  • *
  • Puntos: 31
  • Mensajes: 9
    • Ver Perfil
Respuesta #11 en: Septiembre 18, 2014, 09:09:59 pm
wuau muchas gracias, me parece increible,
me suscribo a tu canal.
y gracias de nuevo esta brutal.

 


Desconectado Mega G

  • Guinxu
  • Adicto
  • *
  • Puntos: 599
  • Mensajes: 391
  • Agradecido: 3 veces
  • Sexo: Masculino
  • Feliz por haber desarrollado un RPG de 30 horas :)
    • Ver Perfil
    • Guinxu.com - ¡Mis proyectos!
Respuesta #12 en: Septiembre 18, 2014, 09:18:55 pm
Gracias por suscribirte  :)
Espero poder subir algún nuevo efecto pronto,
¡saludos!


>Mi web

>Anuncio publicitario
de Gemdow Quest


/!\¿Quieres saber cómo trabajo?

Descarga Gemdow Quest
completo (30 horas de aventura):
Aquí
 


Desconectado TheSandBoxMKG

  • Adicto
  • *
  • Puntos: 497
  • Mensajes: 404
  • Sexo: Masculino
  • Estoy aquí perdiendo tiempo.
    • Ver Perfil
    • MkG GameDev
Respuesta #13 en: Septiembre 18, 2014, 11:22:40 pm
yo usaría surfaces:

crearia dos surfaces, uno con la imagen original y el otro es donde se dibujará la imagen desintegrada.
Código: [Seleccionar]
surface_copy_part(destination,x,y,source,xs,ys,ws,hs) con eso copio parte del surface original y lo pongo en el segundo surface
y luego dibujo el segundo surface en la pantalla.

creo que con esto sería mas optimizado en vez de dibujar bastantes sprites.
« última modificación: Septiembre 18, 2014, 11:25:08 pm por TheSandBoxMKG »

 


Desconectado Black_Cat

Respuesta #14 en: Abril 15, 2016, 06:02:49 pm

Hola tengo una duda respecto al script, y es que cuando lo uso en mis sprites, que no tienen origen en (0,0) se ve movido el efecto.
Grabé un video para que se vea el corrimiento del efecto




Cómo puede solucionarse?

Luego, cabe recalcar que el script no funciona cuando al objeto se le asigna por ejemplo image_xscale = -1, eso me paso probando hahaha
El codigo que uso no tiene mucho enredo.
Cada que le disparas a un enemigo, se setea la variable de "Muerto" en true para que se haga la animación y nada mas.

Asi que deduje que el problema puede ser en el script de dibujo
Ah, me olvide de decir que el origen está por encima del sprite, como por ejemplo y-32, x +16

Únete al servidor mas chidori de Discord