qhhu
Messages postés66Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 octobre 2009
-
18 juin 2006 à 13:55
qhhu
Messages postés66Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 octobre 2009
-
20 juin 2006 à 17:42
Bonjour !
J'ai un problème avec AffineTronsform.
Je voudrais qu'un objet Ellipse2D.Float tourne autour d'un point donné.
Chaque 10 dixièmes de secondes, il augmente d'un degré.
Le problème avec AffineTransform, c'est qu'au lieu de redessiner l'objet avec 1° de plus, il en dessine un nouveau!
Voici mon code:
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
publicclass test extends JFrame{
pupu p = new pupu();
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 19 juin 2006 à 09:46
Il te faut effacer l'arrière plan de ton Graphics avant de tracer de nouveau dessus.
Par contre, pour éviter tout scintillement désagréable, je te conseille également de passer par un double-buffering !
qhhu
Messages postés66Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 octobre 2009 19 juin 2006 à 21:19
Merci bcp c'est exactement ce qu'il me fallait !
Cependant il me reste encore une question...
Moi, pour réduire le scintillement, j'utilise un tout bête
setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON)
mais il ne disparaît pas totalement.
Qu'entends tu par un double-buffering?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 20 juin 2006 à 17:16
Tu confonds l'anti-aliasing avec le double-buffering apparement.
Le code que tu donne ici active l'anti-aliasing, c'est-à-dire le lissage des courbes (ce qui évite d'avoir le fameux effet escalier assez désagréable).
Le double-buffering n'a rien à voir : il s'agit d'une méthode permettant d'éviter un clignotement lorsque tu passe d'une image à une autre. Elle consiste à tracer la prochaine image (dans ton cas, ton elipse à une position différente) dans un buffer (une zone mémoire) qui ne sera affichée qu'une fois complètement tracée, du coup, tu n'a plus l'effet de scintillement.
Pour l'utiliser, c'est un peu plus compliqué (ca doit ressembler à un truc comme cà) :
public void paintComponent(Graphics g){
Image i = (BufferedImage) createImage(2000, 2000);
Graphics buffer = i.getGraphics();
Graphics2D g2 = (Graphics2D) buffer; Ellipse2D.Float ellipse = new Ellipse2D.Float(200f,200f,20f,70f);
//g2.setColor(Color.red);
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(deg),200f,200f);
g2.fill(at.createTransformedShape(ellipse));
g.drawImage(i, 0, 0, null); }
Sinon, plus simple (mais je n'ai jamais essayé) : active directement le doublebuffering du component qui trace ton elipse :
Component.setDoubleBuffered(true);