Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con Threads, Graphics2D y Animaciones

Estas en el tema de Duda con Threads, Graphics2D y Animaciones en el foro de Java en Foros del Web. Buenas, estoy haciendo un programa que dibuje polinomios por medio de Graphics2D. Hasta aquí ningún problema, pero me han pedido que el programa tenga una ...
  #1 (permalink)  
Antiguo 01/05/2010, 10:35
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 14 años, 7 meses
Puntos: 0
Duda con Threads, Graphics2D y Animaciones

Buenas, estoy haciendo un programa que dibuje polinomios por medio de Graphics2D. Hasta aquí ningún problema, pero me han pedido que el programa tenga una opción para dibujar el polinomio de forma animada.

El Polinomio lo calculo previamente en un GeneralPath, y luego si la opción de la animación está activada, la hago desde una "inner class" de tipo Thread. En dicha clase voy recorriendo el GeneralPath con un PathIterator, y voy uniendo todos sus puntos con Line2D. Para hacer un efecto de animación lo que hago es que cada 5 iteraciones duermo el proceso un número X de milisegundos ( sleep(x) ):

Código Java:
Ver original
  1. private class ThreadAnim extends Thread {
  2.    public void run() {
  3.       Line2D.Float line = new Line2D.Float();
  4.       PathIterator pi = pathFunc.getPathIterator(null);
  5.       float[] coord = new float[6];
  6.       float[] coordAnt = new float[2];
  7.  
  8.       try {
  9.          for (int i = 0; !pi.isDone(); i++) {
  10.             pi.currentSegment(coord);
  11.             if (i == 0) {
  12.                coordAnt[0] = coord[0];
  13.                coordAnt[1] = coord[1];
  14.             } else {
  15.                line.setLine(coordAnt[0], coordAnt[1],
  16.                            coord[0], coord[1]);
  17.                g2.draw(line);
  18.                coordAnt[0] = coord[0];
  19.                coordAnt[1] = coord[1];
  20.             }
  21.             if ( ((i % 5) == 0) && (i != 0) ) {
  22.                sleep(10);
  23.             }
  24.             pi.next();
  25.          }
  26.       } catch (InterruptedException e) {
  27.          System.out.println("Interrupted Exception");
  28.       }
  29.    }
  30. }


Esto supuestamente debería de funcionar pero lo que pasa es que todas las líneas del método de arriba se dibujan de golpe al final. Es como si el Graphics2D (g2) fuera como un buffer en el que los cambios no se aplican siempre inmediatamente. La dudas mías son:
  • ¿Hay algun método para un Graphics2D que actualice el dibujo con los últimos cambios? Vamos que sería algo así como un flush con un stream de C por ejemplo. La verdad es que me he vuelto loco intentando buscar algo parecido y no he encontrado nada.
  • Alguna otra forma de hacer una animación sin tener que redibujar todo cada vez (o sea sin tener que hace un repaint() cada vez)?


Muchas gracias de antemano por cualquier info que me puedan dar.

Etiquetas: threads, animacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:15.