next up previous contents
Next: Doble búfer Up: Animaciones Previous: Animaciones   Índice General

Temporizador

Cada vez que se ha acabado el tiempo de un temporizador ejecutamos tres funciones

  1. transformamos nuestro mundo virtual,
  2. mandamos un mensaje a nuestro programa que redibuje el contenido de la ventana,
  3. y reponemos el temporizador de nuevo.

El temporizador tiene que aceptar un parámetro que es la identificación de la ventana. Nosotros usamos por el momento dicho parámetro solamente para pasarlo de nuevo registrando el temporizador otra vez.

Para no complicar la cosa mucho, usamos dos variables globales que nos indican si estamos en modo de animación y cuantos milisegundos dejamos pasar con el temporizador.

  static bool animate       =false;
  static int  timer_interval=500;

  static void Timer(
    int ident
  ) {
    if(animate) {
      TransformWorld();
      glutPostRedisplay();
      glutTimerFunc(timer_interval,Timer,ident);
    }
  }

Dedicamos la tecla `t' para comenzar y terminar la animación, es decir, si no estamos en modo animación (animate==false) activamos el temporizador la primera vez, si estamos en modo animación solamente lo desactivamos. Un fragmento de código que se coloca en la función KeyPress() sería:

  ...
  case 'a':
    if(animate==false) {
      animate=true;
      // para lanzar el temporizador la primera vez
      // usamos la identificaci'on que devuelve la
      // funci'on glutCreateWindow() guardada en una
      // variable global llamado ident
      glutTimerFunc(timer_interval,Timer,ident);
    }
    else animate=false;
    break;
  ...

Podemos usar otras teclas para cortar o ampliar el intervalo del temporizador.



© 2004, Dr. Arno Formella & Dra. Mª Victoria Luzón García, Universidad de Vigo, Departamento de Informática