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
public void run() { float[] coord = new float[6]; float[] coordAnt = new float[2]; try { for (int i = 0; !pi.isDone(); i++) { pi.currentSegment(coord); if (i == 0) { coordAnt[0] = coord[0]; coordAnt[1] = coord[1]; } else { line.setLine(coordAnt[0], coordAnt[1], coord[0], coord[1]); g2.draw(line); coordAnt[0] = coord[0]; coordAnt[1] = coord[1]; } if ( ((i % 5) == 0) && (i != 0) ) { sleep(10); } pi.next(); } } } }
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.