Afficher un message
Vieux 05/11/2007, 04h19   #80
broumbroum
Membre éclairé
 
Avatar de broumbroum
 
Inscription : août 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 406
Points : 383
Points : 383
Par défaut Après le Sprite, la gestion des Canvas de rendu graphique

Avec les Sprites les références aux resources images sont maintenant facilement exploitables sans perte de vitesse (surtout pour le chargement des images) et procurent un accès facilité au double-buffering. Une classe utilisant ces Sprite's pour afficher en passif ou actif en passant par le double-buffering (déjà disponible avec tous les composants Swing) permet de ne pas perdre du temps à recharger les resources relatives au rendu graphique direct à l'écran. Ainsi, RenderingScene est une classe de rendu graphique pouvant se placer au coeur de toute application nécessitant un cadre scénique pour les animations ou graphisme divers.

Les librairies JAI/JIIO doivent être installées. Des raccourcis clavier ont été implémentés ainsi qu'une console de logging du STDOUT, malheureusement encore en phase de développement. Libre à vous de vous inspirer pour votre propre recherche et/ou développement.

Pour l'utiliser, tout se simplifie grâce à 2 Timers Swing intégrés dont un sert au rendu offscreen :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
final Canvas scene = new RenderingScene(new Dimension((int)largeur, (int)hauteur));
// ajouter une action de rendu
((RenderingScene)scene).addActionOffscreen(new AbstractAction() { public void actionPerformed(ActionEvent e) {
       // récupérer le buffer off
       Sprite buffer = ((RenderingScene)scene).getOffscreen();
       Image offscreen = buffer.getImage();
       // et faire son rendu en une passe !
       // par ex. pour dessiner un ovale 30*30 dans le coin superieur droit
       Graphics g = offscreen.getGraphics();
       Color clr = graphics.getColor();
            graphics.setColor(Color.GREEN);
                graphics.drawOval(scene.getWidth() - 30, 0, 30, 30);
                    graphics.fillOval(scene.getWidth() - 30, 0, 30, 30);
            graphics.setColor(clr);
}});
// préparer une fenetre
JFrame frame = new JFrame("rendering scene");
frame.getContentPane().add(scene);
frame.pack();
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
       System.exit(0);
}});
frame.setLocationRelativeTo(null);
frame.setVisible(true); 
// démarrer le rendu
((RenderingScene)scene).resume();
// faire un loop si nécessaire pour eviter de quitter en fin de methode
while(frame.isShowing()) {
   System.out.println("-loop-");  
   Thread.sleep(500);
}
Note: Tout se passe bien avec Java 1.5+ sur PC ou Mac (Linux pas testé car je n'ai pas les librairies et le pc.... lol)
Fichiers attachés
Type de fichier : zip scene.zip (30,7 Ko, 3 affichages)
broumbroum est déconnecté   Envoyer un message privé 00