2010-05-21 7 views
0

Quel est le problème avec mon code applet qui ne rend pas le double tampon correctement.J'essaie et essayant.Mais échoué à obtenir une solution.Plzz Plz quelqu'un me dire ce qui est mal avec mon code.java double problème de tamponnage

import java.applet.* ; 
import java.awt.* ; 
import java.awt.event.* ; 


public class Ball extends Applet implements Runnable 
{ 
    // Initialisierung der Variablen 
    int x_pos = 10;  // x - Position des Balles 
    int y_pos = 100; // y - Position des Balles 
    int radius = 20; // Radius des Balles 

    Image buffer=null; 
    //Graphics graphic=null; 

    int w,h; 

    public void init() 
    { 
     Dimension d=getSize(); 
     w=d.width; 
     h=d.height; 

     buffer=createImage(w,h); 
     //graphic=buffer.getGraphics(); 

     setBackground (Color.black); 

    } 

    public void start() 
    { 
     // Schaffen eines neuen Threads, in dem das Spiel lไuft 
     Thread th = new Thread (this); 
     // Starten des Threads 
     th.start(); 
    } 

    public void stop() 
    { 

    } 

    public void destroy() 
    { 

    } 

    public void run() 
    { 
     // Erniedrigen der ThreadPriority um zeichnen zu erleichtern 
     Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 

     // Solange true ist lไuft der Thread weiter 
     while (true) 
     { 
      // Verไndern der x- Koordinate 
      repaint(); 

      x_pos++; 
      y_pos++; 
      //x2--; 
      //y2--; 

      // Neuzeichnen des Applets 


      if(x_pos>410) 
       x_pos=20; 

      if(y_pos>410) 
       y_pos=20; 

      try 
      { 

       Thread.sleep (30); 
      } 
      catch (InterruptedException ex) 
      { 
       // do nothing 
      } 

      Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
     } 
    } 

    public void paint (Graphics g) 
    { 

     Graphics screen=null; 

     screen=g; 
     g=buffer.getGraphics(); 

     g.setColor(Color.red); 


     g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); 


     screen.drawImage(buffer,0,0,this); 

    } 


    public void update(Graphics g) 
    { 

     paint(g); 
    } 

} 

ce changement devrait i make.When offscreen image est dessinée l'image précédente restent également en screen.How pour effacer l'image précédente de l'écran ??

+0

Pour commencer, vous pouvez arrêter de publier un exemple de code avec 10 méthodes vides. –

+1

Salut russel. Vous avez seulement accepté 33% des 29 questions. Avez-vous vraiment reçu des réponses inutilisables à 20 de vos questions? S'il vous plaît examiner cela et remplacer le "plz plz plz" dans votre message par des informations plus détaillées sur ce qui ne fonctionne pas correctement. Ensuite, vous pourriez avoir de meilleures chances de recevoir des réponses. – chiccodoro

+0

Ok, j'ai trouvé mon problème. J'ai créé une nouvelle image buffer = createImage (w, h); après 'screen.drawImage (buffer, 0,0, this);' et puis le problème de nettoyage est résolu.Mais maintenant un autre problème est apparu, ma balle en mouvement scintille aussi.Alors je me suis demandé si double tamponnage est effectué ici.Comment vérifier cela, tout le monde peut aider ?? – russell

Répondre

1

Il semble que vous ne nettoyez pas votre image tampon entre les tirages. Vous pouvez tester cela en changeant votre code:

g.setColor(Color.red); 
    g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); 

    screen.drawImage(buffer,0,0,this); 

    g.setColor(Color.green); 
    g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); 

qui tire la balle rouge et vert après l'essuie, de sorte que vous voyez Sould une boule rouge en laissant une piste verte. Remplacer la couleur verte par votre couleur de fond ferait l'affaire.

+0

J'ai appliqué votre suggestion, mais le problème reste le même.Infact g.setColor (Color.green); C'est à cause de mis-type.Il aurait dû être commentaire.Le problème est que l'image précédente est restée dans l'écran/figure nouvellement écrite est sur l'image précédente, plutôt que d'une image vide.Comment résoudre ce ?? – russell

+0

@russell, ma suggestion écrase la boule rouge avec une autre couleur, donc l'itération suivante ne doit pas être affichée (utilisez le vert pour laisser une trace et la couleur de fond pour cacher la balle) votre solution créant une nouvelle image tampon équivaut à écraser image avec la couleur par défaut. Votre problème peut-il être le résultat d'avoir un arrière-plan transparent tout en l'effaçant avec une couleur non transparente? – rsp

+0

Je ne pouvais pas comprendre votre question !!, mais ce n'est pas un problème.Parce que je suis enfin devenu capable de supprimer le scintillement en réglant >> screen.drawImage (buffer, 0,0, this); à screen.drawImage (buffer, 0,0, null); Merci beaucoup pour votre aide. Espérons que la prochaine fois vous m'aidez aussi. – russell

1

Vous n'effacez pas le tampon entre deux rendus.

Que diriez-vous d'ajouter

g.fillRect(0, 0, buffer.getWidth(), buffer.getHeight()); 

en utilisant votre couleur de fond (noir?), Avant d'appeler g.setColor(Color.RED); g.fillOval...?

+0

Je l'ai utilisé mais le problème reste same.still ball se déplace avec la queue. Je ne sais pas quoi d'autre je peux faire !!! – russell