IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Animation et transaprence


Sujet :

2D Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Par défaut Animation et transaprence
    Bonjour bonjour

    J'implore votre aide pour ce cruel dilemme que j'ai remarqué ce matin :

    J'ai un cheval animé quand j'appuis sur mes flèches mais il y a un (hideux) carré autour de lui au lieu de la transparence ...

    Pour vous aidez je vais vous passez l'essentiel du code (pas besoin de la gestion de l'animation je pense ...)

    le Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // Init the resources
    		BufferedImage img = ImageUtil.makeColorTransparent("cheval blanc.png", new Color(0,115, 0));
    		BufferedImage[] imgs = ImageUtil.splitImage(img, 4, 4);
     
    		// Animate a sprite
    		AnimatedSprite sprite = new AnimatedSprite(imgs, 10, 30);
     
    		// Map
    		Map map = new Map();
    		map.add(new Sprite(ImageUtil.makeColorTransparent("background.png", new Color(0,0, 0)), 0, 0));
    		map.add(sprite);
     
    		// Now we start animating using the game loop
    		while (true) {
    			Graphics2D g = (Graphics2D) this.getGraphics();
    			map.draw(g);
    			g.dispose();
    			try {
    				Thread.sleep(280);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    ImageUtil.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
     
    import javax.imageio.ImageIO;
     
    public class ImageUtil
    {
    	public static BufferedImage loadImage(String ref)
    	{
    		BufferedImage bimg = null;
    		try
    		{
    			if(new File(ref) == null)
    				System.out.println("Pas de fichier ...");
    			bimg = ImageIO.read(new File(ref));
    		}
    		catch (Exception e){e.printStackTrace();}
    		return bimg;
    	}  
     
    	public static BufferedImage[] splitImage(BufferedImage img, int cols, int rows)
    	{
    		int w = img.getWidth()/cols;
    		int h = img.getHeight()/rows;
    		int num = 0;
    		BufferedImage imgs[] = new BufferedImage[w*h];
    		for(int y = 0; y < rows; y++)
    		{
    			for(int x = 0; x < cols; x++)
    			{
    				imgs[num] = new BufferedImage(w, h, img.getType());
    				Graphics2D g = imgs[num].createGraphics();
    				g.drawImage(img, 0, 0, w, h, w*x, h*y, w*x+w, h*y+h, null);
    				g.dispose();
    				num++;
    			}
    		}
    		return imgs;
    	}
     
    	public static BufferedImage makeColorTransparent(String ref, Color color)
    	{
    		BufferedImage image = loadImage(ref);
    		BufferedImage dimg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
    		Graphics2D g = dimg.createGraphics();
    		g.setComposite(AlphaComposite.Src);
    		g.drawImage(image, null, 0, 0);
    		g.dispose();
    		for(int i = 0; i < dimg.getHeight(); i++)
    		{
    			for(int j = 0; j < dimg.getWidth(); j++)
    			{
    				if(dimg.getRGB(j, i) == color.getRGB())
    					dimg.setRGB(j, i, 0x8F1C1C);
    			}
    		}
    		return dimg;
    	}
    }
    Map.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import java.awt.Graphics2D;
    import java.util.ArrayList;
     
    public class Map
    {
    	private ArrayList<Sprite> objects;
     
    	public Map()
    	{
    		objects = new ArrayList<Sprite>();
    	}
     
    	public void add(Sprite sprite)
    	{
    		objects.add(sprite);
    	}
     
    	public void draw(Graphics2D g)
    	{
    		for(int i = 0; i < objects.size(); i++)
    			objects.get(i).draw(g);
    	}
    }

    AnimatedSprite.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public AnimatedSprite(BufferedImage[] images, double x, double y)
    	{
    		super(null, x, y);
    		this.images = images;
    		frames = new HashMap<String, int[]>();
    		currentState = "wait";
    	}
    // Je vous passe les détails ...
     
    	public void draw(Graphics2D g)
    	{
    		g.drawImage(image, null, (int) x, (int) y);
    	}
    J'ai chercher, j'ai trouvé le DoubleBuffer mais le truc c'est que ma map ne contiendra pas qu'un cheval, mais plein d'éléments, donc je pense pas que ça puisse fonctionner ...

    S'il plait, aidez moi Je suis en train de devenir marteau

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 407
    Par défaut
    La premiere question est ton image a t'elle un canal Alpha? (visiblement non)

    Ensuite, heu ... ca fait beaucoup de code tu pourrai essayer de cibler le probleme.

    Mais de ce que j'ai vu tu essai de dire a ton ordi : prend la couleur x et rend la invisible. Pour que ca marche tu doit le faire pour chaque points de ton image. (i.e. tester la couleur de chaque pixel et si c'est un pixel que tu ne veu pas afficher, tu regle l'alpha en fonction)

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dimg.setRGB(j, i, 0x8F1C1C);
    Pourquoi tu as ecrit ceci ? pour rendre des pixels transparent parce que ca ca n'ira pas d'apres moi.

    Sinon ton image de base, elle est transparent ou tu assumes qu'il faut "eliminer" un couleur clée ? Elle serait transparent ca irait tout seul a mon avis.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54
  2. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11
  3. [Composants][Animation] Lire une vidéo compressée
    Par femtosa dans le forum Composants VCL
    Réponses: 6
    Dernier message: 03/09/2002, 08h03
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo