void insert_points( int fpg, gráfico, número_puntos, unsigned short * datos )


Descripción:

Esta función sustituye los puntos de control actuales por los nuevos, en un gráfico (del fpg indicado).

Un punto de control es un punto que se puede definir en el editor de gráficos (herramienta de dibujo), en la opción habilitada para dicha función.

La función necesita el código del fpg, y del gráfico así como el número de puntos de control que será el número de puntos que tiene el mapa mas el punto central y un puntero a la tabla de puntos.


unsigned short puntos[]=
 {160, 100, 57, 27, 76, 38, 117, 31, 146, 22, 174, 27, 180, 43, 167, 66,
  142, 98, 124, 118, 132, 141, 148, 145, 176, 129, 208, 92, 239, 50,
  257, 38, 279, 40, 294, 59, 297, 92, 295, 141, 293, 173, 282, 184,
  262, 181, 251, 166, 236, 151, 215, 149, 200, 157, 183, 178, 159, 187,
  124, 186, 83, 174, 30, 151, 15, 142, 13, 132, 19, 121, 36, 113, 58, 110,
  80, 103, 97, 89, 103, 76, 91, 65, 71, 62, 42, 61, 24, 61, 14, 56, 11, 45,
  15, 34, 20, 27, 28, 21, 35, 19, 44, 20};

MAIN_PROGRAM_CDIV
 PRIVATE
  int fichero1,
      punto,
      x_punto,
      y_punto;

BEGIN_PROGRAM

 set_gfx(GFX_AUTODETECT_WINDOWED);

 set_mode(m320x200);

 punto = 1;
 fichero1 = load_fpg("../help.fpg");

 insert_points(fichero1, 4, 51, puntos);
 put_screen(fichero1, 4);

 graph = 101;
 LOOP{
  if (fget_dist2d(x, y, x_punto, y_punto) < 6)
   if (punto++ == 50)
    punto=1;

  // Cogemos el punto de control
  get_point(fichero1, 4, punto, &x_punto, &y_punto);

  angle = fget_angle2d(x, y, x_punto, y_punto);
  advance2d(6);
  FRAME;
}

END_PROGRAM

En el ejemplo después de insertar los puntos de control correspondientes, se pone como fondo un dibujo con un circuito que recorre la pantalla; este dibujo (el gráfico 4 del fichero) tiene definidos 50 puntos de control (del 1 al 50) a lo largo del recorrido del circuito.

El proceso principal aparece como un triángulo que va recorriendo el circuito.

Esto se consigue teniendo en la variable punto el número del punto de control al que se debe dirigir el triángulo, en un principio el punto número 1.

Las coordenadas de cada punto de control, obtenidas con la función get_point(), se guardan en las variables x_punto e y_punto y sirven para que el proceso se dirija hacia esa posición con las funciones fget_angle2d() (para obtener en la variable angle el ángulo hacia el punto) y advance2d() (para avanzar 6 puntos en esa dirección).

Cuando se está cerca del punto de control, lo que se comprueba con la función fget_dist2d(), es si se incrementa el número de punto, para dirigir el triángulo hacia el siguiente (cuando se haya alcanzado el punto número 50, se volverá al 1).

Esta función devuelve las coordenadas exactas en las que fue colocado ese punto de control dentro del gráfico, sin importar cómo esté dicho gráfico ahora (escalado, rotado, etc.). Para poder obtener la posición de un punto de control en un gráfico escalado, rotado, etc. y relativa a las coordenadas de pantalla (y no del gráfico original) se debe emplear la función get_real_point().

Es decir, esta última función devuelve dónde está en un momento determinado un punto de control, y get_point() devuelve dónde fue emplazado originalmente.


Ver: Puntos de control - get_real_point() - get_pixel_screen()