Bonjour,
Est-il possible de dessiner directement à l'écran en utilisant des couches superposées (un peu comme avec les LayeredPane) ?
Version imprimable
Bonjour,
Est-il possible de dessiner directement à l'écran en utilisant des couches superposées (un peu comme avec les LayeredPane) ?
Oui, avec un LayeredPane ou un OverlayLayout.
oui, je me suis sans doute mal expliqué. Ma question plus précise est donc:Citation:
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.Citation:
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)).
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 :wink:
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 :wink:
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...Citation:
Envoyé par Gfx