Incitado por Polimalo, y después de la última incursión en la demoscene usando Flash (MX 2004/7 en aquel momento), he decidido darle un voto de confianza a Flash CS3/9, y probar las posibilidades del objeto BitmapData para manipular píxeles.

La idea ha sido portar el clásico algoritmo de generación de fuego a ActionScript 3, y ver que ocurría. La primera versión del programa, la tuve lista en 45 minutos, dando 4 frames/segundo.

Invertí tres horas más optimizando código (más detalles en el changelog del propio fuente), y haciendo pruebas de diferentes implementaciones, hasta llegar a conseguir un rendimiento de 30 FPS, limitado basicamente por la eficiencia del método setPixel().

Posteriormente fueron necesarias 2 horas más, lidiando con la implementación de los botones que contiene textfields, y otras cosas extrañas a las que Flash nos tiene acostumbrado.

El resultado, es bueno en el sentido que ofrece un rendimiento sorprendente en Flash, y malo desde el punto de vista que lo que se obtiene es comparable a código C o ensamblador de los 90, ejecutado en un 386…

El proceso ha tenido algunas enseñanzas de optimización más que curiosas, pues en el resto de lenguajes no funciona así:
– Es más rápido un ByteArray que un Array.
– Es más rápido un int que un uint.
– …

Estaré encantado si alguien me envía mejoras en la implementación que le den mayor velocidad, por supuesto, te puedes inspirar descargando el binario y el fuente desde aquí (11 Kb. en formato ZIP).