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
Luego
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
Con todo esto quedaria un archivo de configuracion más o menos asi:
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.
Si quieres hacerlo más genérico, es dividir
Código [Seleccionar]
base_rot = 2*PI / num_frags
.Luego
Código [Seleccionar]
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
Código [Seleccionar]
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:
Código [Seleccionar]
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.