BufferStrategy dans un applet

BufferStrategy dans un applet - Java - Programmation

Marsh Posté le 11-06-2004 à 13:11:52    

Bpnjour !
 
Je n'arrive pas à utiliser de BufferStrategy dans un applet, sans ouvrir de nouvelle fenêtre...
Voilà le code très simple que je compile, et le problème c'est qu'une nouvelle fenêtre s'ouvre (ce qui est normal puisque Toto est une Frame). J'aimerais bien que tout s'éxecute directement sur la page web...
 
 
public class Exemple extends Applet  
{    
 public void init()  
    {
       new Toto();
    }
}  
 
 
class Toto extends Frame
{
    int x;
    private RenderingThread render;
    private BufferStrategy strategy;
    private Graphics backBuffer;
 
    public Toto()  
    {
 System.out.println("Toto" );
        render = new RenderingThread();
        x = 50;
        setSize(400, 400);
        setVisible(true);
        setIgnoreRepaint(true);
        createBufferStrategy(2);
        strategy = getBufferStrategy();
        backBuffer = strategy.getDrawGraphics();
        render.start();
    }
 
    private void renderingRoutine()
    {
        x++;
        if(x > 180)
            x = 30;
 
        backBuffer.setColor(Color.white);
        backBuffer.fillRect(0,0,getWidth(),getHeight());
        backBuffer.setColor(Color.black);
 
        backBuffer.fillOval(100,100,x,x);
        strategy.show();
    }
 
    class RenderingThread extends Thread {
        public void run() {
            while(true)
            {
                try {
                    sleep(20);
                    renderingRoutine();
                } catch (java.lang.InterruptedException e){}
            }
        }
    }
}
 
 
 
Merci d'avance !


Message édité par City_Hunter le 11-06-2004 à 13:15:47
Reply

Marsh Posté le 11-06-2004 à 13:11:52   

Reply

Marsh Posté le 12-06-2004 à 13:44:25    

Pour les applets, je te conseille d'utiliser la technique de double buffering software, c'est à dire de dessiner dans une Image, et de la peindre dans la méthode paint exemple :
 

Code :
  1. class Mzed extends Applet{
  2. Image  bufferImage;
  3. Graphics  buffer;
  4. [..]
  5. private void renderingRoutine(){
  6.  buffer.setColor(Color.red);
  7.  buffer...
  8.  [..]
  9. }
  10. public void update(Graphics g){
  11.  g.drawImage(bufferImage,0,0,this);
  12. }
  13. }


 
Donc, tout ton processus de dessin se fait dans une image invisible (bufferImage), et quand tout est fini, hop tu la peinds dans le Graphics de l'applet et elle est affichée.

Reply

Marsh Posté le 12-06-2004 à 14:09:00    

C'est effectivement vers quoi je me suis tourné ;) Mais j'ai l'impression qu'au niveau vitesse, c'est pas très optimal... La vitesse varie beaucoup d'un PC à l'autre, enfin je ne sais pas si c'est vraiment dû à ça...

Reply

Marsh Posté le 12-06-2004 à 14:21:34    

je crois avoir lu que justement, contre toute attente, le double buffering software était plus rapide que le hardware

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed