map_xput()

map_xput(<fichero>, <gráfico destino>, <gráfico origen>, <x>, <y>,            <angle>, <size>, <flags>)

Descripción:

Versión extendida de la función map_put().

Pone un gráfico en otro. El gráfico que se va a copiar se denomina <gráfico origen> y el gráfico destino es en el que se copiará el origen, es decir, esta función permite copiar un gráfico (origen) a otro (destino).

Ambos gráficos deben estar en el mismo fichero. Los parámetros son, por orden, los siguientes:

<fichero> - código del fichero con la librería de gráficos que contiene a ambos. Los gráficos cargados con la 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).

<gráfico destino> - código del gráfico en el que se va a poner el otro.

<gráfico origen> - código del gráfico que va a ser copiado en el destino.

<x>, <y> - coordenadas dentro del gráfico destino donde se desea poner el gráfico origen. En estas coordenadas es donde se copiará el gráfico origen a partir de su esquina superior izquierda.

<angle> - ángulo (en milésimas de grados) en el que se copiará el gráfico origen, el ángulo normal es 0.

<size> - tamaño (en porcentaje) en el que se copiará el gráfico original, el tamaño normal es 100.

<flags> - Indica los espejados y transparencias con los que se copiará el gráfico original en el destino; los valores son:

 0-Gráfico normal.
 1-Espejado horizontal.
 2-Espejado vertical.
 3-Espejado horizontal y vertical (180°).
 4-Gráfico transparente.
 5-Transparente y espejado horizontal.
 6-Transparente y espejado vertical.
 7-Transparente, espejado horizontal y vertical.

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.

Programa ejemplo:
PROGRAM ejemplo_map_xput;
PRIVATE
    x_destino;
    y_destino;
    fichero1;
    ángulo1;
    tamaño1;
    banderas1;

BEGIN
    fichero1=load_fpg("help\help.fpg");
    graph=1;
    x=160;
    y=100;
    LOOP
        x_destino=rand(0, 319);
        y_destino=rand(0, 199);
        ángulo1=rand(-pi, pi);
        tamaño1=rand(10, 200);
        banderas1=rand(0, 7);

        map_xput(fichero1, 1, 101, x_destino, y_destino, ángulo1, tamaño1, banderas1);

        angle+=2000;
        FRAME;
    END
END


En el ejemplo, se pone el gráfico 1 en el centro de la pantalla rotando contínuamente (este gráfico es un fondo decorativo en grises).

En cada paso del bucle se pondrá dentro de él otro gráfico con forma de triángulo (con el número 100). Este gráfico se pondrá con coordenadas, ángulo, tamaño y banderas (ver variable flags) elegidas de forma aleatoria.

Se puede observar cómo en el gráfico de fondo van apareciendo contínuamente triángulos de color marrón con diferentes efectos aplicados.


La función map_xput() es una versión un poco más compleja de la función map_put(), siendo ésta más fácil de utilizar cuando no se requiera poner gráficos rotados, escalados, espejados y transparentes.

Para poner una parte de un gráfico en otro (en lugar de poner el gráfico completo) se debe utilizar la función map_block_copy().


Nota: Cuando se utilice la función map_xput() (o cualquier otra similar) para modificar un gráfico que se está utilizando como fondo de una ventana de scroll, puede que el gráfico puesto no aparezca de forma inmediata en pantalla; para solventar este problema se debe utilizar la función refresh_scroll().


Ver: map_put() - map_put_pixel() - refresh_scroll() - map_block_copy()