21 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(const 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.

Relacionado con: play_memory_fli, install_timer, fli_frame.
int play_memory_fli(const 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 reservando un bloque de memoria con malloc 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().
Relacionado con: play_fli, install_timer, fli_frame.
int open_fli(const char *filename);
int open_memory_fli(const 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.
Relacionado con: close_fli, next_fli_frame.
void close_fli();
Cierra un FLI cuando haya acabado con �l.
Relacionado con: open_fli.
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 hubo 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.
Relacionado con: open_fli, fli_bitmap, fli_palette, fli_timer, fli_frame.
extern BITMAP *fli_bitmap;
Contiene el cuadro actual de la animaci�n FLI/FLC.
Relacionado con: next_fli_frame, fli_bmp_dirty_from, fli_palette.
extern PALETTE fli_palette;
Contiene la paleta del FLI actual.
Relacionado con: next_fli_frame, fli_pal_dirty_from, fli_bitmap.
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.
Relacionado con: fli_bitmap, reset_fli_variables.
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().
Relacionado con: fli_palette, reset_fli_variables.
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_*.
Relacionado con: fli_bmp_dirty_from, fli_pal_dirty_from.
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 comprobarla en la funci�n callback de play_fli() y usarla para reproducir un sample en un punto particular.
Relacionado con: play_fli, play_memory_fli, next_fli_frame.
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.
Relacionado con: install_timer, next_fli_frame.

Volver al Indice