Bonjour,
Est-il possible de dessiner directement à l'écran en utilisant des couches superposées (un peu comme avec les LayeredPane) ?
Bonjour,
Est-il possible de dessiner directement à l'écran en utilisant des couches superposées (un peu comme avec les LayeredPane) ?
oui, je me suis sans doute mal expliqué. Ma question plus précise est donc:Envoyé par Gfx
comment dessiner (g.fillRect()) directement, sans passer par un composant Swing sur des niveaux différents ?
Tu ne peux pas a moins d'ecrire toi-meme une petite architecture de layers. C'est tres facile a faire (et je suis en train de tanner les ingenieurs Java2D pour avoir ca dans Java 1.7![]()
merci pour le tuyau, mais cela est sûrement au delà des capacités d'un débutant comme moi.Envoyé par Gfx
finalement, les composants swing sont beaucoup plus facile à gérer car lorsqu'on les efface, ils restituent correctement le fond qu'ils recouvraient.
Note que si tu veux dessiner sur un composant Swing sans recouvrir tout ce qu'il y a en dessous il faut bien penser a appeler setOpaque(false) sur le composant (sauf si tu herites de JComponent qui fait ca par defaut).
En fait, je n'ai plus de composant swing, en dehor du Jpanel.
Je dessine les briques et la balle direct avec les instructions graphiques.
revers de la médaille, lorsque la balle passe sur une partie de la brique, il faut que je redessine la brique...
Tu peux utiliser des calculs d'intersection d'entre la boite englobantes de la balle, de la raquette, etc ... et de la zone de clip actuelle* du Graphics pour redessiner le moins de chose possible lors des mises a jour.
Puisqu'il t'es possible de demander la "repeinture" d'une region specifique du panel (public void repaint(long tm, int x, int y, int width, int height)).
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
C'est quoi la zone de clip actuelle ?
concernant le repaint(), je dessine les briques dans une boucle, donc le fait que je passe en paramètre une zone d'écran ne changera pas qu'il redessinera toutes les briques à chaque fois. (raison pour laquelle je n'appelle pas repaint() pour redessiner la balle à chaque mouvement.
p.s. bonjour à la Calédonie![]()
getClipBounds() donne la zone de l'ecran a reafficher. Il faut ecrire ses fonctions de dessin pour ne redessiner que ce qui en a besoin.
Sinon, tu peux utiliser le GLF - Graphic Layer Framework :
une petite API simple en JAVA entièrement basé sur Java2D qui gère les layers facilement. Voici le lien :
http://java.sun.com/products/java-media/2D/samples/index.html
http://java.sun.com/developer/Books/2dgraphics/chapter6.html
Cela a été mis au point par Vincent J.Hardy de chez Sun, et il l'explique en détail dans son livre "Java 2D Api Graphics", éditions SUN.
;-)
Ok, merci pour toutes ces réponses![]()
je vais étudier tout cela.
Je me demande d'ailleurs si GLF est adapte pour faire un jeu. J'ai le bouquin mais je n'ai jamais pris le temps d'etudier l'API de GLF. J'ai une reunion avec Vincent demain je lui poserai la question. Son livre en tout cas est vraiment genial. Ses exemples Java2D sont impressionnants.
Je confirme : j'ai le bouquin et je suis en train de le parcourir : c'est vraiment très bien fait !
;-)
Effectivement, à première vue (rapide) il semblerait qu'il s'agisse d'un empilement de couches, mais il n'est pas évident que l'on puisse dessiner en tous temps sur chaque couche comme on le veut...Envoyé par Gfx
Partager