Surface de dessin dédiée en Java?


Je veux faire un dessin 2D efficace en Java. Je voudrais avoir une sorte de surface que je peux dessiner librement sans avoir à laisser la hiérarchie de vue traverser et mettre à jour, ce qui peut provoquer un bégaiement.

J'ai d'abord utilisé un JPanel et appelé repaint() mais je trouve que ce n'est pas optimal (et c'est la raison pour laquelle je demande). La chose la plus proche avec laquelle j'ai travaillé est le SurfaceView d'Android et cela me donne une surface de dessin dédiée.

Pour réaliser ce dessin dédié surface, dois-je utiliser OpenGL ou existe-t-il un équivalent SurfaceView?

Author: Simon Zettervall, 2013-08-06

1 answers

Si vous n'avez pas besoin d'Accélération Graphique, vous pouvez dessiner sur un BufferedImage avec Graphics2D. Une fois que vous avez vos données dans le BufferedImage, vous pouvez simplement peindre le BufferedImage sur le composant. Cela évitera toute sorte de scintillement dont vous parlez.

La création du BufferedImage est facile:

int w = 800;
int h = 600;
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

Ensuite, vous pouvez y dessiner des objets avec un contexte graphique (éventuellement dans votre propre fonction de rendu):

Graphics2D g = bi.createGraphics();
g.drawImage(img, 0, 0, null);
//img could be your sprites, or whatever you'd like
g.dipose();//Courtesy of MadProgrammer
//You own this graphics context, therefore you should dispose of it.

Ensuite, lorsque vous repeignez votre composant, vous dessinez le BufferedImage sur celui-ci pièce:

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(bi, 0, 0, null);
}

C'est un peu comme utiliser BufferedImage comme tampon arrière, puis une fois que vous avez terminé de dessiner dessus, vous le repeignez sur le composant.

 4
Author: Joseph Pla, 2013-08-06 08:37:39