void map_block_copy( int fpg, gfx_destino, x_destino, y_destino, gfx_origen, x, y, ancho, alto )


Descripción:

La función map_block_copy() permite transferir un bloque rectangular de un gráfico a otro.

El gráfico del cual se toma la región rectangular se denomina gráfico origen y el gráfico destino es en el que se copiará
dicho bloque, es decir, esta función permite copiar un trozo de un gráfico (origen) a otro (destino). Los parámetros son, por orden, los siguientes:

fichero - Ambos gráficos deben provenir del mismo fichero de gráficos. Como primer parámetro se debe especificar el código del fichero (ver load_fpg()). Los gráficos cargados con las funciones load_map() o load_pcx() (o creados con new_map()) se utilizarán como si pertenecieran al primer fichero (el fichero con el código 0).

gfx_destino - Código del gráfico en el que se va a poner el bloque.

x_destino, y_destino - Coordenadas (x, y) en las que se quiere poner el bloque dentro del gráfico destino.

gfx_origen - Código del gráfico del que se va a tomar el bloque.

x, y - Coordenadas de inicio del bloque dentro del gráfico origen.

ancho, alto - Dimensiones del bloque que se va a transferir.

Esta función modificará el gráfico indicado, pero sólo la copia del mismo que se ha cargado en la memoria del ordenador. El gráfico original, que está en el archivo FPG, MAP o PCX del disco, permanecerá inalterado. Por ello si se quiere en un momento del juego recuperar el estado original del gráfico se tiene que descargar de memoria (con unload_fpg(), unload_map() o unload_pcx()) y después volverlo a cargar.


MAIN_PROGRAM_CDIV

PRIVATE
   int
    x_destino, y_destino,
    x_origen, y_origen,
    ancho, alto,
    fichero1;

BEGIN_PROGRAM

    set_gfx(GFX_AUTODETECT_FULLSCREEN);
    set_mode(m320x200);

    fichero1 = load_fpg("help/help.fpg");  // Se carga el fichero de gráficos

    graph=1;
    x=160;
    y=100;

    LOOP{
        x_destino=rand(0, 320);
        y_destino=rand(0, 200);
        ancho=rand(1, 32);
        alto=rand(1, 32);
        x_origen=rand(0, 32-ancho);
        y_origen=rand(0, 32-alto);

        map_block_copy(fichero1, 1, x_destino, y_destino, 100, x_origen, y_origen, ancho, alto);

        FRAME;
        angle+=1000;
    }

END_PROGRAM

En el ejemplo, después de cargar el fichero de gráficos y poner uno ( el gráfico número 1) el centro de pantalla va rotando continuamente. En el bucle principal, se va copiando el gráfico de una bola (el gráfico número 100) dentro del gráfico destino (el número 1) en unas coordenadas elegidas aleatoriamente.

Cuando se ponga un gráfico en otro que se esté utilizando como fondo para una región de scroll, éste  aparecerá automáticamente en pantalla.


Ver: map_xput() - map_put() - map_put_pixel()