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