Colisiones y motores de física en Action Script

En la vida de un desarrollador flash lo normal es encontrarse con algún proyecto que implica el manejo de propiedades fisicas, como colisiones, escalados, fuerzas, traslaciones, rotaciones… En muchas ocasiones los efectos son sencillos y no es demasiado complicado crear un sistema realista y funcional, pero otras esto no basta.

Somos programadores y no tenemos por qué tener un grado de conocimiento de matemáticas muy elevado (aunque para bien o para mal nuestro mundo gira totalmente entorno a la geometría y trigonometría), así que nunca viene mal tener un aliado de ese lado, en mi caso tengo la suerte de tener un hermano físico, que muchas veces me ha sacado de un apuro, por un signo incorrecto, una interpretación del problema no adecuada… pero no es plan de abusar de la familia.

Lo que os presentamos en este post es un recopilatorio de diferentes motores de física en flash, para controlar colisiones, rebotes, fuerzas. Muchas veces… no tenemos que inventar la rueda. Así que si en la lista falta alguno que conoces y que crees que es digno de mención, no lo dudes y coméntanoslo.

Box2DFlash
Este motor, portado del original creado por Erin Catto’s en C++ por Colin Northway, es una potente solución que contempla multitud de situaciones, como podéis ver en los ejemplos de su web. Además del proyecto en sourceforge, podéis ver la web del motor aquí.

APE: ActionScript Physics Engine
APE (Actionscript Physics Engine) es un motor opensource de física 2D para ActionScript 3, que puede ser empleado en flash y flex. Su autor es Alec Cove. Probablemente uno de los motores más conocidos, aunque por lo que he investigado en algunos casos la gente que lo ha exprimido al máximo considera que quizás no esté tan maduro como se puede necesitar.

Aquí os dejamos un tutorial de regalo.
Y su segunda parte.

Fisix Engine
Interesantísimo motor con unos buenos tutoriales (aun sin completar) y documentación. Puedes verlo en acción en unos ejemplos muy currados y de este motor realmente hay comentarios muy positivos, aunque puede que sea un poco más complejo de “asumir su funcionamiento”.

FOAM
Un motor eficiente, pero que no viene acompañado de documentación ya que su autor es de la opinión que la mejor manera de comprenderlo es a través del código fuente del mismo. La documentación está precisamente en los comentarios sobre le código, que es lo que el autor echa en cara al resto de motores existentes por la red.

Demo 01: Caída perpetua
Demo 02: Test sin gravedad

Detección de Colisiones por Grant Skinner
Grant Skinner se curró en su día una interesantísima idea para detectar colisiones basándose en la clase BitmapData. Muchas veces no necesitamos un motor completo de física para nuestro proyecto, y simplemente un buen método para la detección de colisiones. Este sistema me parece una gran solución y de muy buena precisión.

Quizás alguno piense que está en AS2 y que ya no encaja en nuestros requerimientos, pero por suerte ya hay gente que se ha tomado la molestia en portarlo a AS3, cosa que evidentemente no parecía tarea difícil. La gente del estudio belga Boulevart tiene ya su código portado a AS3. (nota del que escribe: Elad, si estabas pensando en ello, no hace falta que sigas)

Luego existe alguna solución en camino o más experimental como Glaze Engine, del que no tengo mucha información que daros, pero que está ahí con algun ejemplo.

No obstante, tengo que decir, que en contra de lo que comencé escribiendo en el post, me parece muy importante y necesario saber qué tipo de cosas puede haber por debajo de estos motores, ya que en ocasiones tenemos que trabajar con colisiones o física totalmente en estado puro (por ejemplo programando una extensión de servidor para SmartFoxServer en su “particular ActionScript”). En un entorno así, o en otros muchos que nos podemos topar, no tenemos ni clases ActionScript, ni BitmapData, ni hitTest, ni métodos de Sprite o MovieClip… y solamente tenemos matemáticas y la trigonometría básica (ángulos, rectas, intersecciones, traslaciones, rotaciones…)

A nosotros nos ha ayudado bastante éste artículo sobre colisiones publicado en cristalab, y sobre todo el código fuente que hay detrás de él, que es puro cálculo matemático y no emplea más propiedades que las posiciones, ángulos y fuerzas de los elementos que intervienen. Si miráis el código veréis lo sencillo que puede ser el trabajo con formas circulares para afrontar los diferentes tipos de colisiones, y el consejo mejor que os puedo dar es trabajar con ángulo y velocidad, en vez de velocidades indeoendientes para el eje X e Y.

Lo dicho, sería genial conocer vuestra experiencia con alguno de estos motores, o descubrimientos de motores alternativo, esperamos tus comentarios!