Sunday, July 21, 2013

Extensiones para Flash - Flash Extensions

Un pequeño resumen de lo que he ido aprendiendo sobre el tema este de extender la API de Flash:
(es un resumen de verdad. Lo iré completando con capturas y más detalles).

Por un lado los paneles.
El primero que hice era un renombrador para la biblioteca. Lo he rehecho para AS3. Funciona bastante bien. Es capaz de renombrar por patrón (arrays del tipo xxxx_n_m, o xxx_carpeta_n), sustituir patrones, añadir sufijos y prefijos, etc, etc.
La idea ahora es crear un panel de biblioteca alternativo, con opciones especificas para animación.
Los paneles los publico directamente en la carpeta de windowSWF. Nunca me puse en serio con el tema de los instaladores.

Otro proyecto, que de momento es un fracaso, es el pincel rasterizado. Un pincel tipo Photoshop (con presión) para abocetar en el propio IDE de flash. Para este proyecto estoy usando la conectividad con las DLL en C para tener acceso a la presión de la tableta directamente a través del sistema (desde flash no se puede que yo sepa).
Primer problemón: conseguir compilar los ejemplos en code-blocks. Esta la superé. Ya sé que puedo bajar el visual express, pero no me apaño.
Segundo compilar en 64 bits para poder usar la DLL en CC. Tambien superado. Esto no fue tan complicado. Baje la versión de 64 bit de Mingw y fue bastante rápido.
Tercer problema, al llamar a la tableta desde wintab me cargo el contexto que usa el propio Flash, así que aunque consiga leer la presión (que no he podido), Flash se queda sin acceso a la tableta luego.
Así que ahora estoy intentando acceder a la tableta a través de Realtime Stylus de Windows. Ya veremos si sale algo o no. Acceder a estas cosas desde una DLL es un rollo porque no sé lo que está fallando, y probar el programa es un dolor (abrir y cerrar Flash cada vez). Además me apaño fatal con las funciones de C que hay que usar para comunicarse con Flash (que no soy programador vaya! :D)

Otra tragedia añadida es que Adobe se ha cargado las funciones de acceso a los bits de los bitmaps de jsfl, Al menos en CS6 y CC. No actualiza los bitmaps o lo hace mal. Esto se carga otras ideas que tenía yo en mente. A ver que pasa. En CS3 sí parece ir bien. Lo he reportado y ya veremos que dicen. La verdad es que creo que nunca ha funcionado como dice el manual. Se alteran los bits de los objetos de la biblioteca, no sólo los de la instancia, pero bueno, eso me da más igual. Lo mismo lo he interpretado erróneamente.

No he conseguido manipular los bits desde la DLL. Pero en CS3 si he podido manipularlos desde el propio script. Al menos salen cosas curiosas. Es bastante lento pero algo es algo. Con un pincel/lápiz no muy grueso, que no obligue a refrescar una región grande, debería funcionar bien.

Con estas funciones estoy generando efectillos curiosos en el propio IDE que se pueden exportar como secuencias de png, sin más post-proceso añadido, ya que esos bitmaps están en la propia biblioteca.

Otro proyecto que usa esto es el warp deformer exportable. Pensado para crear animaciones de deformación en juegos. Se genera un bmp a partir de los manejadores. Los manejadores se dibujan en la capa de herramientas del api y el bitmap sustituye al original para la visualización. A la hora de exportar, el bitmap de visualización se ignora y sólo se pasan los parámetros de deformación para el bitmap original. De momento sólo uso deformaciones lineales. El panel sirve para inicializar la maya de deformación de cada bitmap y dar acceso a los controles para animar posteriormente (también para resetear la maya, copiar y pegar parámetros y en un futuro ajustar parámetro de la maya). Estoy muy contento con el resultado.
En el futuro me gustaría aplicar la maya a composiciones de bitmaps también.

El último proyecto es una ventana dinámica para sustituir instancias. En CC lo han mejorado un poco, pero se echan en falta cosas. A ver como resulta.