20 Rutinas FLIC



Hay dos funciones de alto nivel para reproducir animaciones FLI/FLC: play_fli(), la cual lee datos directamente del disco, y play_memory_fli(), la cual usa datos que ya están cargados en la RAM. Aparte de las diferentes fuentes de las que se sacan los datos, estas dos funciones se comportan de forma idéntica. Ambas dibujan la animación en el bitmap especificado, que debería ser normalmente screen. Los cuadros se alinearán con la esquina superior izquierda del bitmap: si quiere posicionarlos en otra parte de la pantalla tendrá que crear un sub-bitmap y decirle al reproductor FLI que dibuje allí la animación. Si loop está activado, el reproductor volverá al principio de la animación cuando ésta acabe, de otro modo, reproducirá la animación una vez. Si la función callback no es NULL, será llamada por cada frame, permitiéndole realizar tareas en segundo plano. La rutina de callback debe devolver cero: si retorna un valor que no es cero, el reproductor se parará (este es el único modo de parar una animación que esté siendo repetida). El reproductor FLI devuelve FLI_OK si ha llegado al final del fichero, FLI_ERROR si hubo problemas, y el valor de la función callback, si fue ésta la que paró la reproducción. Si necesita distinguir entre diferentes valores de retorno, su rutina de callback debería devolver enteros positivos, ya que FLI_OK es cero y FLI_ERROR negativo. Tome nota de que el reproductor FLI sólo funcionará si se instaló el módulo de temporización, y que alterará la paleta de colores según la del fichero de animación.

Ocasionalmente podría necesitar un control más detallado sobre la reproducción FLI, por ejemplo si quiere sobreimprimir algún texto sobre la animación, o reproducirla a una velocidad diferente. Puede hacer ambas cosas usando las funciones de bajo nivel descritas abajo.

int play_fli(char *filename, BITMAP *bmp, int loop, int (*callback)());
Reproduce un fichero FLI o FLC del Autodesk Animator, leyendo los datos del disco según se necesiten.

int play_memory_fli(void *fli_data, BITMAP *bmp, int loop, int (*callback)());
Reproduce una animación FLI o FLC del AutoDesk Animator, leyendo los datos de una copia de un fichero que se almacena en memoria. Puede obtener el puntero fli_data haciendo un malloc a un bloque de memoria y copiando el fichero FLI allí, o importando un FLI en un fichero de datos con el grabber. Reproducir animaciones desde la memoria es obviamente más rápido que desde disco, y es particularmente útil con animaciones FLI pequeñas que se repiten. Sin embargo, las animaciones pueden fácilmente llegar a ser grandes, por lo que en la mayoría de los casos sería mejor que use play_fli().

int open_fli(char *filename);
int open_memory_fli(void *fli_data);
Abre un fichero FLI para reproducirlo, leyendo los datos del disco o de la memoria respectivamente. Devuelve FLI_OK con éxito. La información del FLI actual está almacenada en variables globales, por lo que sólo puede tener una animación abierta a la vez.

void close_fli();
Cierra un FLI cuando haya acabado con él.

int next_fli_frame(int loop);
Lee el siguiente cuadro de la animación actual. Si loop está activado, el reproductor volverá al principio cuando llegue al final del fichero, o devolverá FLI_EOF si loop está desactivado. Devuelve FLI_OK con éxito. FLI_ERROR o FLI_NOT_OPEN si hay error, y FLI_EOF al alcanzar el final del fichero. El cuadro es leído y almacenado en las variables globales fli_bitmap y fli_palette.

extern BITMAP *fli_bitmap;
Contiene el cuadro actual de la animación FLI/FLC.

extern PALETTE fli_palette;
Contiene la paleta del FLI actual.

extern int fli_bmp_dirty_from;
extern int fli_bmp_dirty_to;
Estas variables son fijadas por next_fli_frame() para indicar qué parte de fli_bitmap ha cambiado desde la última llamada a reset_fli_variables(). Si fli_bmp_dirty_from es mayor que fli_bmp_dirty_to, el bitmap no cambió. De otro modo, las líneas de fli_bmp_dirty_from a fli_bmp_dirty_to (inclusive) fueron alteradas. Puede usar estos valores cuando copie fli_bitmap en pantalla, para evitar mover datos innecesariamente.

extern int fli_pal_dirty_from;
extern int fli_pal_dirty_to;
Estas variables son fijadas por next_fli_frame() para indicar qué parte de fli_palette fue cambiada desde la última llamada a reset_fli_variables(). Si fli_pal_dirty_from es mayor que fli_pal_dirty_to, la paleta no fue modificada. De otro modo, los colores de fli_pal_dirty_from a fli_pal_dirty_to (inclusive) fueron alterados. Puede usar estas variables cuando actualice la paleta hardware, para evitar llamadas innecesarias a set_palette().

void reset_fli_variables();
Una vez haya hecho lo que fuese a hacer con fli_bitmap y fli_palette, llame esta función para resetear las variables fli_bmp_dirty_* y fli_pal_dirty_*.

extern int fli_frame;
Variable global que contiene el número de cuadro actual del fichero FLI. Esto es útil para sincronizar otros eventos con la animación, por ejemplo podría chequearla en una función callback de play_fli() y usarla para reproducir un sample en un punto particular.

extern volatile int fli_timer;
Variable global para cronometrar la reproducción FLI. Cuando abre un fichero FLI, una interrupción de temporizador es instalada, la cual incrementa esta variable cada vez que se va a visualizar un nuevo cuadro. Llamando a next_fli_frame() la decrementa, por lo que puede comprobarla y saber el momento de enseñar un nuevo cuadro cuando sea mayor que cero.




Volver al Indice