Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Comportamiento de fragmentos tras rotura o explosion

Iniciado por bnl, 17 de Marzo de 2013, 09:04:04 AM

« anterior - próximo »

bnl

Buenas
Quiero implementar la fragmentacion de un objeto y el comportamiento de sus fragmentos tras una su rotura

En principio seria una burbuja (todavia no esta definido al 100%) que al recibir un impacto se dividiria en varias mas pequeñas que luego desaparecerian.

Se me ocurre que quiza se podria hacer con un pequeño sistema de particulas.

¿Cual pensais que es la mejor forma de implementar este comportamiento?

Gracias
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Gallo

Depende un poco de las necesidades. Si los fragmentos simplemente han de salir dispersados acia arriba siguiendo el comportamiento aleatorio de una nube de burbujitas y no han de colisionar con otros objetos, un sistema de particulas es lo adecuado.

Si han de colisionar con otros objetos enteces eberas incorporar fisicas 2d a cada particula ademas de su comportamiento de burbuja.

Si no han de colisionar y ademas tampoco es necesario que la animacion sea aleatoria, entocnes una sequencia de sprites con toda la explosion puede ser lo adecuado.

bnl

Si, seria simplemente un efecto estetico. La burbuja una vez ha recibido el impacto deja de existir y sus fragamentos no tienen que interactuar con nada y al poco desaparecerian.
Que sea aleatorio tampoco seria necesario, quiza meter 2 o 3 comportamientos distintos para que no sea siempre igual. Lo que no tengo claro es como montarlo para que quede un comportamiento natural de los fragmentos.

Los fragmentos tampoco serian muchos, quiza de 3 a 5.

Gracias!!!
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

TrOnTxU

Yo creo que con aplicar gravedad constante y aplicar las velocidades iniciales (emisor) correctamente ...

cada frame por particula actualizas:

vel = vel + acc*dt
pos = pos + vel*dt


más o menos, no?

Algo como lo que puse en este articulo, pero más sencillo y en 2D:
http://typhoeus-sdk.blogspot.com.es/2012/06/problemas-de-memoria-no-lo-se-no-me.html

La única pega que le veo si quieres que los fragmentos tengan rotacion en "profundidad". Si es rotacion 2D pura le puedes poner una pequeña velocidad angular sin aceleracion, y otro parámetro que tienes para modificar.

Al final lo bueno es que puedas cargar los parametros del sistema desde un archivo de configuración para poder recargarlo durante el juego, y ir haciendo pruebas para ver como queda, algo asi como un "editor improvisado" para salir del paso  0:-)
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

bnl

Gracias.
Rotacion no habia pensado ponerle pero lo mismo me lo replanteo a raiz de tu comentario.

¿Como definirias las velocidades iniciales de cada fragmento de la burbuja?

Se me habia ocurrido simplemente que surgieran los fragmentos desde la posicion de la burbuja explotada cada una con un angulo, por ejemplo con 30º, 60º, 90º, 120 y 150º por ejemplo. Incluso que a cada angulo se le pudiera definir al azar una desviacion de +-5º o +-10º para que el resultado de cada explosion fuera diferentes
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

TrOnTxU

#5
Si quieres tener precalculados los vectores normalizados, y no tener que ir haciendo senos y cosenos sobe la marcha (aunque muchos procesadores ya guardan tablas precalculas de sin, cos), si que puedes utilizar unos angulos fijos.

Si quieres hacerlo más genérico, es dividir base_rot = 2*PI / num_frags.
Luego angle = base_rot*i + desviacion donde "i" es el numero del fragmento.

La desviación como dices un rango, yo la calcularia con un "random_float(min, max)" o la implementación que tengas echa (si no lo tienes todavia, yo me haria esa función, es muy, muy útil).

Con este angulo yo calcularia un vector normalizado, es decir sinf( angle ), cosf( angle ). Y luego lo multiplicaria (cada componente x e y) por la velocidad inicial, que podrias calcularla como otro "random_float(min, max)".

Con todo esto quedaria un archivo de configuracion más o menos asi:

num_frags = 5
min_desv_ang = -0.01
max_desv_ang = +0.01
min_vel_ini = 2.0
max_vel_ini = 3.0
min_rot_ang = -0.05
max_rot_ang = +0.05


Si crees que hay demasiado trabajo de senos y cosenos durante la creación de la explosión puedes mirar de precalcularte los vectores iniciales para un minimo angulo en un array y luego seleccionar el que te convenga. Pero yo no creo que sea necesario.

Un saludo.

EDIT:
Otra cosa que igual veo más complicada, es que si los fragmentos son recortes de la imagen original de la burbuja, si se crean desde el centro del antiguo sprite (burbuja completa), igual la transición te queda un poco "extraña".
Puedes hacer que el "punto central" de los fragmentos esté en la posición relativa donde debiera estar el centro de la burbuja completa. Pero si utilizas este mismo punto como "pivot point" para escalar y rotar, las rotaciones te quedaran un poco raras (es decir, pivotando sobre un punto fuera del mismo sprite).

La otra solución es que apliques las posiciones relativas al centro del sprite completo, al crear los fragmentos. Pero tienes que "saber" (calcularlas en el programa que tengas de edición de imagen o dibujo) esas coordenadas, y aplicarlas a los fragmentos, con lo que se vuelve un poco más complicado el hacer código genérico y reusable.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

bnl

Muchas gracias por la respuesta. Muy util y completa  :)
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.