void fadvance3d( CPROCESS * identificador, int distancia )


Descripción:

Avanza el proceso en su ángulo 3D (el que indique la variable local angle3d) tantos puntos como indique la expresión (distancia) pasada como parámetro.

Para avanzar en un ángulo distinto al contenido en esta variable se puede utilizar la función xadvance3d().

La distancia puede ser también un número negativo, con lo cual el gráfico del proceso avanzará (sus coordenadas x, z) en la dirección contraria a su ángulo.


MAIN_PROGRAM_CDIV

PRIVATE
    int fichero1;

BEGIN_PROGRAM
    set_gfx(GFX_AUTODETECT_WINDOWED);
    set_mode(m320x200);

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

    y = -5; // Subimos la cámara 5 píxeles

    start_3d(0, fichero1, 100, 512, 512, 0, this);

    write(0, 0,  0, 0, "Pulsa las flechas:");
    write(0, 0,  8, 0, " Arriba    - Ir hacia delante");
    write(0, 0, 16, 0, " Abajo     - Ir hacia atras");
    write(0, 0, 24, 0, " Derecha   - Rotar hacia la derecha");
    write(0, 0, 32, 0, " Izquierda - Rotar hacia la izquierda");
    
    LOOP{

        if( key(_right) )
         angle3d.y += 5000;

        if( key(_left) )
         angle3d.y -= 5000;

        if( key(_up) )
         fadvance3d(this, 5);

        if( key(_down) )
         fadvance3d(this, -5);

        FRAME;
    }
END_PROGRAM

Este ejemplo vemos como desplazarse por un espacio 3D por medio de los cursores de posición. Avanzamos según el ángulo, en la superficie por medio de la función fadvance3d().

Esta función equivale siempre a las dos siguientes sentencias:

 x+=get_distx3d(angle3d, distancia);
 y+=get_disty3d(angle3d, distancia);
 z+=get_distz3d(angle3d, distancia);

Es decir, esta función únicamente modifica las coordenadas del proceso. Cabe la posibilidad de utilizar las dos sentencias anteriores cuando se quiera que el proceso avance en un ángulo diferente al que indica su variable angle3d; esto resultará útil cuando se quiera que el gráfico del proceso avance en una dirección sin rotarse.

Por ejemplo, para conseguir que un proceso avance 8 puntos en una dirección (que se podría tener en una variable privada como angle2) pero rotado hacia otra dirección, (la indicada en angle3d), se utilizarían las sentencias:

 x+=get_distx3d(angle2, 8);
 y+=get_disty3d(angle2, 8);
 z+=get_distz3d(angle2, 8);


Ver: xadvance3d() - Uso de ángulos en el modo 3D - get_distx3d() - get_disty3d() - get_distz3d()