Quiero hacer una serie de patrones de viñetas en expansión que formen formas como cuadrados, triángulos, etc. Un ejemplo de lo que busco se puede ver en el siguiente video donde cuando se recogen las estrellas, las balas explotan en forma de estrella en expansión:
12
Respuestas:
La forma más fácil de hacer esto sería diseñar primero la forma y luego calcular el movimiento de las partículas. En esta respuesta, construiré un cuadrado, pero esto se aplica a cualquier forma.
Comience diseñando su forma como posiciones relativas alrededor de algún punto de origen.
Ahora necesita calcular cómo se expandirá la forma. Para hacer esto, simplemente calculamos el vector que apunta de a
origin
a cadapoint
restando laorigin
posición de nuestrapoint
posición y luego normalizando el vector.vector = normalize(point.x - origin.x, point.y - origin.y)
.Ahora podemos calcular la posición de los puntos en cualquier momento usando este vector. Calcula la siguiente posición de los puntos haciendo
point.position += point.vector * point.velocity
. Ejemplo de pseudocódigo utilizando nuestro punto anterior:Hacer esto moverá todos los puntos hacia afuera a 3 unidades cada cuadro.
Notas
fuente
Entonces, existe este proyecto llamado BulletML, que es un lenguaje de marcado para crear patrones complejos de partículas / viñetas. Seguramente necesitarás portar el código a tu propio idioma, pero puede hacer algunas cosas realmente sorprendentes.
Por ejemplo, este jefe se realizó en una extensión (muy modificada) de BulletML para Unity3D (el autor de ese patrón subió ese video y Misery es una locura, así como buena 1 ). Es la variación más difícil de ese enemigo y muestra lo que BulletML es capaz de hacer bastante bien (y echa un vistazo a algunos de los otros jefes de Misery, como Wallmaster ).
O puedo mostrar este ejemplo, que es un patrón que escribí mientras trabajaba en una expansión para The Last Federation , usando una revisión anterior del sistema que es menos amigable con los mods y usa solo variables AZ de un solo carácter:
Las balas verdes que hacen esos anillos allí se generan a partir de una bala principal que gira a alta velocidad, pero no tienen movimiento. Infligen un daño masivo, manteniendo al jugador a un rango más largo, restringiéndolos a armas de menor daño y permitiendo a los defensores móviles acosar al jugador (el jugador gana si la estructura inmóvil en el medio allí fue destruida).
Aquí hay una parte de la sintaxis XML que crea esas burbujas:
Puede ver algunas de las tomas púrpuras de "ondas de gravedad" en la captura de pantalla, que viajan casi instantáneamente desde la fuente (que gira) hasta el borde de la burbuja, con lo que genera la toma verde de "barra curva", que se encuentra allí durante 12 segundos antes desesperando Los tiros azules y amarillos que he omitido, ya que son mucho más complicados.
Misery escribió uno de los otros patrones (un proyectil de artillería ) en la expansión, aunque le hice algunas modificaciones. Inicialmente, es un disparo penetrante de bajo daño que vuela a gran distancia y luego explota en una gran exhibición de fuegos artificiales, infligiendo toneladas de daño. Su alcance máximo fue mucho más alto de lo que el jugador pudo lograr, esencialmente forzando al jugador a atacar a corto alcance, lo que fue ventajoso para los otros tipos de unidades NPC debido al efecto de escopeta (más balas agrupadas en una zona pequeña).
BulletML es fácil de trabajar, en general, y puede hacer cosas increíbles. Las viñetas pueden cambiar de dirección, cambiar la velocidad, generar otros patrones, morir temprano, repetir la recopilación de comandos en un bucle, usar retrasos, cambiar la imagen del sprite de bala, seguir a su padre (o no) ... Y cualquier cosa que no sea compatible con usted podría escribir en él
Definitivamente lo recomendaría si estás haciendo un juego serio de disparos. Aún necesitaría resolver las matemáticas de coordenadas para obtener las formas deseadas, como Charanor habla en su respuesta, pero un motor de bala como BulletML le dará mucha más flexibilidad que pasará más tiempo diseñando nuevos patrones que descubriendo cómo codificarlos.
fuente
Como lo señaló Charanor, puede usar una variedad de puntos para definir su forma y luego actualizar su posición con el tiempo. A continuación se muestra un ejemplo práctico de cómo implementar una forma de estrella o una forma personalizada utilizando puntos:
fuente