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 :

Probleme avec Gif animé !


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Probleme avec Gif animé !
    Bonjour tout le monde !
    Voila, j'ai un probleme dans mon interface graphique, j'aimerai afficher un gif animé qui montre un bonhomme attaquer a chaque fois que je clique sur le bouton attaquer.
    C'est en fait un gif qui ne boucle qu'une seule fois. Mais le probleme c'est que quand je clique sur le bouton le gif ne s'anime que la premiere fois.
    J'ai essayer de retourner a mon image defaut.jpg (qui est en fait la 1ere et derniere image de mon gif) a la fin mais ca ne lance pas le gif puisqu'il est aussitot remplacé par le defaut ! Il faudrait peut etre defenir un temps entre les 2 showImage() mais je ne vois pas comment faire !
    J'ai aussi essayer de mettre un showImage(defaut.jpg) avant le le showImage du gif mais ca ne change rien !
    Je ne suis peut etre pas assez clair, alors voyez plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private JFrame cadre;
    private JLabel image;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JButton attaquer = new JButton("Attaquer");
    //avec attaquer dans un Jpanel
    ...
    attaquer.addActionListener(new ActionListener() {  public void actionPerformed(ActionEvent e) { vie -= 5; println("Il perd 5 pv !"); showImage("attaque.gif");  updateVies(); }});
    ...
    showImage("defaut.jpg");
    cadre = new JFrame("Fenetre de Combat");
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void showImage(String imageName)
        {
            URL imageURL = this.getClass().getClassLoader().getResource("combat/"+imageName);
            if(imageURL == null)
                println("Image non trouv? ou indisponible");
            else
            {
                cadre.repaint(); // ca ne change rien !
                ImageIcon icon = new ImageIcon(imageURL);
                image.setIcon(icon);
                cadre.pack();
            }
        }
    Est ce que quelqu'un a une solution pour moi ?
    merci.

  2. #2
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Slt,

    je ne sais pas si j'ai tout compris mais tu peux kan meme essaye ca :
    premierement tu demande de redessiner ton cadre alors que tu n'as pas encore changer l'image de ton label ... donc forcement il va t'afficher l'image d'avant.
    Deuxiement vu que ton interface n'a pas changee avant l'appel de ton repaint(), la fonction paint() ne sera jamais appelee car il va estimer qu'il n'y a pas de modifications a faire.
    As tu essaye de redefinir ta fonction paintComponent() afin d'integrer ton code d'affichage de ton label ??

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    comme en réalité j'avais 2 boutons avec chacun un gif different, j'ai remarqué qu'on pouvait relancé l'animation de l'un tant que l'animation de l'autre n'est pas terminé et ceci indefiniment !
    Mais si on attend la fin de l'un des gifs, c'est fini, il ne redemarre plus.

    J'ai essayer pour le repaint() mais ca n'a rien donné.

    Quant a redefinir paintComponent() j'aimerai que vous m'eclairciciez, je ne comprends pas a quoi cela peut servir puisque je n'utilise pas cette fonction.
    Si vous me conseillez de l'utilisez pouvez vous m'expliquez comment ?

    Sinon n'y aurait il pas en java un moyen d'executer une fonction quelque temps apres ? J'ai une classe horloge qui permet de compter le temps mais je ne pense pas qu'elle puisse me servir.
    Si toujours non, N'y a t il pas d'autre moyen de resoudre ce probleme ?
    merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    J'ai peut etre trouvé une solution à mon probleme sur le net : la fonction sleep(); de Thread. Malheureusement ca ne marche pas, des que je clique sur le bouton, la fonction sleep est activé et pendant ce temps la on attend sans que le gif ne tourne.
    Je sens que les threads pourraient m'aider pour la suite (la contre-attaque par exemple) mais nous n'avons pas aborder ce point en cours et cela me parrait compliquer pour mon probleme.
    Peut etre que je peux lancer une thread qui fait tourner le gif et une autre qui va remettre l'image a la fin du gif, ou peut etre que je dis n'importe quoi...

    Une solution s'il vous plait ?

  5. #5
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Slt,

    ce n'est pas normale que tu ne puisse pas redemarrer ton giff apres un arret...mais bon !!
    En ce qui concerne ta fonction paibtComponent() je t'explique. Quand tu utilise la libraire SWING et que tu fais un repaint() d'un de tes composant, cette methode repaint() va faire appel a update puis a paintComponent. Update permet d'effacer ce que tu as a dans ton composant (en fait il redessine un carre blanc) et la fonction paintComponent redessine ton coposant. ce qui fait que si tu veux faire du dessin ou des trucs de ce genre c avec la methode paintComponent que tu dois t'amuser (ceci dit en passant si tu utilise du AWT ce sera la methode paint). Mais bon je te conseille de chercher un tutoril sur ce sujet et tu coprendras mieux.....yen a plein sur ce site !!

    Pour les threads ce n'est pas tres complique mais c vrai que si tu mets des sleeps qui blokent le reste du code ca riske d'etre chiant. sinon utilise la classe timer de la librairie swing qui te permettra d'executer une action avec un delai donne.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonjour,
    J'ai actuellement un problème similaire d'image GIF qui ne se "relance" pas.
    J'ai 4 gifs animés représentant les 4 flèches du clavier avec pour chacun une des flèches qui clignote, lorsque j'appuie sur une des flèches je doit afficher le gif correspondant.
    Ce qui se passe : lorsque j'appuie la première fois sur chacune des flèches, le gif s'anime, si j'appuie une seconde fois, je n'ai que la dernière image du gif, il n'y a plus l'animation.
    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
     
    	public void touchPress(java.awt.event.KeyEvent e) {
    		int code = e.getKeyCode();
    		switch (code) {
    		case 37 :	//fleche gauche
    			direction = 1;
    			repaint();
    			break;
    		case 38 :	//fleche haut
    			direction = 2;
    			repaint();
    			break;
    		case 39 :	//fleche droite
    			direction = 3;
    			repaint();
    			break;
    		case 40 :	//fleche bas
    			direction = 4;
    			repaint();
    			break;
    		default :
    			Toolkit.getDefaultToolkit().beep();
    		}
    	}
    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
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		Graphics2D g2 = (Graphics2D) g;
    		Image img = Toolkit.getDefaultToolkit().getImage("images/touches.gif");
    		Image img1 = Toolkit.getDefaultToolkit().getImage("images/ahaut.gif");
    		Image img2 = Toolkit.getDefaultToolkit().getImage("images/abas.gif");
    		Image img3 = Toolkit.getDefaultToolkit().getImage("images/agauche.gif");
    		Image img4 = Toolkit.getDefaultToolkit().getImage("images/adroite.gif");
    		switch (direction) {
    		case 0 :
    			g2.drawImage(img, (this.getWidth()/2)-(img.getWidth(null)/2), (this.getHeight()/2)-(img.getHeight(null)/2), this);
    			break;
    		case 1 :
    			g2.drawImage(img1, (this.getWidth()/2)-(img1.getWidth(null)/2), (this.getHeight()/2)-(img1.getHeight(null)/2), this);
    			break;
    		case 2 :
    			g2.drawImage(img2, (this.getWidth()/2)-(img2.getWidth(null)/2), (this.getHeight()/2)-(img2.getHeight(null)/2), this);
    			break;
    		case 3 :
    			g2.drawImage(img3, (this.getWidth()/2)-(img3.getWidth(null)/2), (this.getHeight()/2)-(img3.getHeight(null)/2), this);
    			break;
    		case 4 :
    			g2.drawImage(img4, (this.getWidth()/2)-(img4.getWidth(null)/2), (this.getHeight()/2)-(img4.getHeight(null)/2), this);
    			break;
    		default :
    		}
    utoz07 as-tu réussi à résoudre ton problème ?

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Pourquoi utiliser un GIF animé?
    Ne serait-il pas plus simple (et plus permissif au niveau des espaces de couleurs) d'utiliser plusieurs images PNG, chacune représentant une "étape" (ou alors une seule image PNG qui contienne la succession des images (du pixel 0 à 99 en abscisse, c'est la première image, de 100 à 199 c'est la 2e... etc...).

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Le gif est un peu l'apanage du flemmard j'avoue
    entre gérer un timer qui m'affiche mes images à la suite ou afficher une image déjà séquencée
    Et puis d'un autre coté je n'ai pas besoin de beaucoup de couleurs.
    Et pour en revenir au problème, il fait parti des problème "ah ben ça marche maintenant"
    Enfin, j'ai changé les variables img1, img2... je n'ai plus qu'une seule variable img qui est affectée dans chaque "case"

Discussions similaires

  1. Problème avec Gif Animée
    Par gotcha007 dans le forum wxPython
    Réponses: 2
    Dernier message: 05/02/2011, 13h21
  2. Probleme avec une animation Flash.
    Par fracsangie dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 24/08/2008, 22h30
  3. Problème avec mon anim d'intro sur mon site ?
    Par masta64 dans le forum Flash
    Réponses: 5
    Dernier message: 02/12/2006, 22h39
  4. bouton avec gif animé ?
    Par Mihalis dans le forum Delphi
    Réponses: 2
    Dernier message: 28/11/2006, 12h34
  5. [FLASH 8 Pro] Problème avec mon animation
    Par [UBFR]Bastien dans le forum Flash
    Réponses: 1
    Dernier message: 05/11/2006, 20h56

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