cs_Juls
Messages postés41Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention16 juillet 2003
-
30 avril 2003 à 11:26
eldered
Messages postés232Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 mai 2022
-
4 mars 2004 à 13:17
Bonjour
Je rencontre un problème de scintillement d'une image de fond (image.jpeg) . Le prog redessine un objet mobile (voiture simulée par un cercle ) sur un parcours (l'image de fond en question) . La fonction repaint est cadencé par le timer c'est pour cela je suppose que mon image de fond effectue un scintillement désagréable .
Existerait il un moyen pour eviter se scintillement .
Peut on effectuer une surdéfinition de la fonction paint ou à l'intérieur de celle ci empécher que l'image de fond soit redéssinné à chaque appel à repaint() .
cs_Juls
Messages postés41Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention16 juillet 20034 30 avril 2003 à 12:30
J'ai essayé la deuxiéme solution manque de chance l'image de fond disparait au premier evenement timer lorsque le prog redessine les cercles .
J'ai peur que la premiere solution ne fasse pareil car normalement pour voir apparaitre mes cercles sur le parcours je dois les dessiner aprés l'image de fond c'est pour cela que le fait de ne pas la redessiner la rend invisible . Existe-t-il une fonction qui pourrait résoudre se problème en indiquant au compil que cette image est par defaut mon image de fond ???
ce que tu fais ici, c'est créer une image de la grandeur que tu veux (la grandeur de la zone à dessiner) et puis tu accèdes aux graphiques de cette images. Par la suite, dans la méthode paint() de ton applet, tu utilises cet objet (offGraphics) pour dessiner ce que tu veux, en prenant soin de redessiner le fond au complet.
offGraphics.setColor(la couleur que tu veux);
offGraphics.fillRect(x,y,w,h);
et puis les cercles :
offGraphics.fillOval(x,y,w,h);
une fois que tu as tout dessiné, tu dessines l'image sur l'objet Graphics passé en paramètre à la méthode paint :
g.drawImage(offImage, 0, 0, this);
Et voilà ! Ce que le double buffering fait, c'est de dessiner sur une image tampon, tous les graphiques nécessaires, puis de dessiner cette image, d'un seul coup, sur l'écran.
Autre chose, pour améliorer le tout, c'est qu'il faut aussi implémenter (en particulier si tu utilises l'instruction repaint) la méthode update() de l'applet :
public void update() {
paint(this.getGraphics());
}
Car lorsque tu appelles un repaint() sur un objet awt ou swing, la méthode update() est appellée automatiquement : alors celle-ci contient une routine qui efface les graphiques - un "clear" - ce qui cause le scintillement. Mais tu n'as plus besoin de vider l'écran parceque tu peints tout au même moment.