1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
import java.awt.*;
import java.awt.image.*;
public class DoubleBufferingHardware extends Frame{
// boucle d'affichage
RenderingThread renderingThread = new RenderingThread();
// variable permettant d'utiliser la mémoire VRAM
BufferStrategy strategy;
// buffer mémoire où les images et les textes sont appliqués
Graphics buffer;
int x = 0; // coordonnée x de l'affichage du texte
public DoubleBufferingHardware(){
setSize( 400, 400 );
setVisible( true );
// inhibe la méthode courante d'affichage du composant
setIgnoreRepaint( true );
// on créé 2 buffers dans la VRAM donc c'est du double-buffering
createBufferStrategy( 2 );
// récupère les buffers graphiques dans la mémoire VRAM
strategy = getBufferStrategy();
buffer = strategy.getDrawGraphics();
renderingThread.start();
}
public void graphicalRender(){
buffer.setColor( Color.black );
buffer.fillRect( 0, 0, 400, 400 );
buffer.setColor( Color.white );
buffer.drawString( "affichage d'une ligne de texte", x, 200 );
x++;
if ( x > 400 ) x = 0;
//on envoie toutes les données du buffer mémoire vers le buffer d'affichage (équivalent d'un flush en C/C++)
strategy.show();
}
class RenderingThread extends Thread{
/**
* Ce thread appelle le rafraichissement de notre fenêtre
* toutes les 10 milli-secondes
*/
public void run(){
while( true ){
try {
// on appelle notre propre méthode de rafraichissement
graphicalRender();
sleep( 5 );
} catch ( Exception e ) {}
}
}
}
public static void main(String[] args){new DoubleBufferingHardware();}
} |