omcougar
Messages postés152Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 8 octobre 2008
-
28 août 2006 à 13:05
Twinuts
Messages postés5373Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention10 août 2022
-
28 août 2006 à 15:53
Bonjour,
je joue un peu avec les fonctions 2D et pour ce faire j'ai crée un petit jeu avec des personnagues qui courent sur un terrain... bref :)
Globalement je dessine tout mon petit monde sur un graphique 2D surlequel j'ai préalablement appliqué une transformation affine correspondant au zoom sur une partie précise du dessin.
Mon probleme est que je voudrais par dessus ma zone zoomée, ajouter des éléments qui ne sont pas soumis au zoom... mon idée était de créer un segond Graphics2D sans fonction affine que je fusionne avec le premier avant de l'afficher à l'ecran mais je ne sais pas comment m'y prendre.
tucobouch
Messages postés194Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 1 mai 200950 28 août 2006 à 13:39
Bonjour,
pas besoin d'un deuxieme Graphics, tu dessine tous tes objets zoomé en appliquant ton AffineTransform de zoom et ensuite tu enleve cette cette transformation du graphics pour afficher les objets non soumis au zoom.
En gros :
paintComponent :
//sauvegarde l'AffineTransform par defaut :
AffineTransform t=gTmp.getTransform();
//affiche avec le zoom :
gTmp.setTransform(AT_Globale);
//etc..
//enleve le zoom :
gTmp.setTransform(t);
//dessine les objets non zoomés
// puis ici j'appelle ma méthode pour dessiner le fond et mes personnages
Dessine(gTmp);
//ici tu peux dessinner ce que tu veux en superposant les images
drawMyImage(this, g, new Rectangle(50, 50, 100, 100));
}
public void drawMyImage(Component c, Graphics g, Rectangle bounds ){
//tu creer une image transparente
BufferedImage bi = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_INT_ARGB);
//tu récupere le graphique de l'image
Graphics2D g2 = bi.createGraphics();
//juste pour le fun tu ajoute une petite transparence sur le nouveau dessin 0.0f <= alpha <= 1.0f (1 == pas de transparence)
float alpha = .5f;
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
//ici tu commence à dessiner ce que tu veux
g2.setColor(Color.BLACK);
g2.fillRect(0, 0, bounds.width - 1, bounds.height - 1);
//tu dessine l'image
g.drawImage(bi, bounds.x, bounds.y, c);
//tu relache les ressources du Graphics2D
g2.dispose();
}
Bref ce n'est qu'un exemple pour te donner une petite idée.
petit conseil pour un jeux n'utilise pas les jpanel ou autre merdasse du genre qui te bouffe plus de ressource qu'autre chose, prefere l'utilisation de sprites et des buffer strategie (ci dessous un lien utilisant cette technique) :
http://www.javafr.com/codes/JEU-SHOOT-REALISER-AVEC-CLASS-SPRITE_18353.aspx
ce qui rendra ton jeu tout de suite plus fluide.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
omcougar
Messages postés152Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 8 octobre 20081 28 août 2006 à 15:26
Ma classe est un JPanel... j'utilise ca en attendant mieux...
j'avais déja téléchagé le shoot'n up mais je n'ai pas trop saisis ... et peu cherché je dois l'avouer :) ... par contre ta methode ne bug pas mais rien ne s'affiche :,(