Scintillement image de fond

Signaler
Messages postés
41
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
16 juillet 2003
-
Messages postés
231
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
22 avril 2007
-
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() .

Merci pour vos suggestion .

Juls

4 réponses

Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
salut,
oui tu peux redefinir la fonction paint et a l interieur faire un test par exemple qui eviterait de redessiner ton image
Duss
Messages postés
41
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
16 juillet 2003
4
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 ???
Messages postés
182
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
5 janvier 2004
3
he he c'est drôle cette idée "d'image de fond" !!!

non, ce n'est pas possible. la solution s'appelle le "double buffering" et c'est beaucoup plus simple qu'il n'y parait de prime abord.

d'abord, tu as besoin d'un objet Image, que tu trouves dans le package java.awt ; ensuite un objet Graphics :

Image offImage;
Graphics offGraphics;

puis, au lancement du programme, tu peux assigner ces variables comme suit :

(la méthode createImage est implémenté dans les classes awt, je crois)

offImage = createImage(largeur, hauteur);
offGraphics = offImage.getGraphics();

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.

Voilà, j'espère t'avoir aidé un peu.

raff
Messages postés
231
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
22 avril 2007

Nikel ton explication !

Merci bien, j'en avais besoin !!!

++

-----------------------------
Membre de la blindprod :