Affichage de plusieurs layer/claques??

Résolu
Signaler
Messages postés
28
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour,

Pour ne pas avoir à tout redessiner à chaque fois, j'aimerai utilisé plusieurs buffer d'images : le fond, les objets "mouvant",... et les fusionner au moment de l'affichage d'où ma question :
Une fois ces buffers "remplis", et il possible de les superposer pour les afficher sur un Canva ?

BokC

9 réponses

Messages postés
28
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008

J'ai trouvé mon erreur : la declaration du BufferedImage je mettais comme type : TYPE_INT_RGB alors qu'il falait mettre :
biUnite = new BufferedImage( getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

oui c'est possible.... le principe est simple la derniere image dessinée represent le premier plan.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
En faisant bien attention toutefois que les zones transparentes de chaque couche soient bien de couleur transparentes, sinon ca va masquer ce qu'il y a dessous !
Messages postés
28
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008

Ah... Et comment dis tu des le debut que tout est transparent sauf se que je dessine?
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Il suffit de tracer un rectangle de couleur transparente :

g2d.setColor(new Color(0, 0, 0, 255)); // new Color(0, 0, 0, 0) je sais plus !
g2d.fillRectangle(0, 0, 100, 100); // à remplacer par la taille de ton image bien sûr.
Messages postés
28
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008

Ca marche pas completement... J'obtiens un fond noir avec un rectangle bleu (unite) mais le Map a disparu. Voila mon code :

    public void paint(Graphics g) {
        Graphics2D g2 =(Graphics2D) g;
        g2biMap.setColor(Color.PINK);
        g2biMap.fillRect(0,0, width, height);
        for (int x=0;x<nbTuileW;x++) {
            for (int y=0;y<nbTuileH;y++) {
                tuiles[x][y].draw(g2biMap);
            }
        }
        g2.drawImage(biMap,0,0,this);
       
        g2biUnite.setBackground(new Color(0f, 0f, 0f, 0f));
        g2biUnite.setColor(new Color(0f, 0f, 0f, 0f));
        g2biUnite.fillRect(0, 0, width, height);
        for(AbstractUnite unite : unites) {
            unite.draw(g2biUnite);
        }
        g2.drawImage(biUnite,0,0,this);
    }

Je pense que le pb vient de la methode utiliser pour superposer les buffer mais je ne sais pas comment faire autrement.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Essaye alors avec :
g2biUnite.setColor(new Color(0f, 0f, 0f, 1f));
Messages postés
28
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008

Ca change rien
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Ah oui forcément, il faut que tes bufferedImage gèrent le canal alpha !