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

Interfaces Graphiques en Java Discussion :

repaint qui sintille


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut repaint qui sintille
    Bonjour,

    j'aimeré creer un petit jeu en java et pour cela je me base sur des sources utilisé au cours d'un TP durant mes cours mais qui sont developpé pour tourner sur téléphone portable et donc utilisent des bibliotheques spécifiques.

    J'ai donc esséyé de convertir ces sources pour qu'elle puissent fonctionner sur PC mais je rencontre quelques probleme lors des repaint qui font sintiller l'image (avec l'image qui s'efface pour se réafficher). Alors que sur la version pour portable il n'y avait pas ce probleme :/

    Donc si quelqu'un à le temps et est interessé pour m'aider je laisse les sources pour qu'il puisse regarder :

    mes sources
    les sources de base pour telephone portables

    Pour executer mes sources il faut le lancer en tant qu'applet depuis la classe XplodedCanvas

    Le probleme vient peut etre des drawImage dans les classe Map et Cat dont j'ai mi le dernier paramettre à null car je ne savais pas à quoi il sert

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Par défaut
    Salut,

    Je n'ai pas regardé tes sources par manque de temps, mais est-ce que sur le panel où tu pains ta carte et tout le reste tu as activé le double buffering (qui permet d'éviter le scintillement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tonPanel.setDoubleBuffered (true);
    Voilà j'espère que c'était le problème.

    a+

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Merci mais je ne trouve pas sur quoi utiliser cette méthode :/

    Je n'ai pas de pannel juste un applet et il n'a pas l'air avoir cette méthode


    edit:

    Il semblerai qu'en utilisant une JApplet cela sintillerai beaucoup moins

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Si tu utilises des images, utilises en la version compatible:

    http://www.jroller.com/page/gfx/?anc...p_effects_part

    (méthode loadCompatibleImage)

  5. #5
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Pourais tu m'en dire un peu plus ?

    Je débute et je n'ais pas vraiment compris ce que fesait loadCompatibleImage et comment l'utilser :/

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Je pense avoir identifier plus ou moins le probleme

    J'ai creer une version allégé du code qui ne fait que l'affichage pour ceux qui souhaiterai m'aider :

    http://seb33300.free.fr/chat/light.zip

    En fait il semblerai que la map et le personnage soient tous les 2 affiché indépendement, la map est afficher en 1er puis le personnage ce qui fait sintiller le personnage. (Si vous executez le code c'est ce que vous devriez voir)

    Il faudrait donc utiliser un buffer comment pour l'affichage de la map et du personnage mais c'est la que ça me pose probleme car je ne voi pas comment faire. La map et le personnage sont géré dans 2 classes différentes mais utilise le meme Graphics qui leur est passé en paramettre depuis la classe qui gere l'Applet

    En gros on a l'Applet avec ça méthode paint(Graphics _g) qui va passé en paramettre _g dans les méthodes draw() du personnage et de la map
    Ces méthodes vont ensuite faire un drawImage() sur le _g et donc afficher l'image chacun leur tour... Et pour éviter le sintillement il faudrait que l'affichage sa fasse que lorsque les 2 elements soit chargés

    Au passage, il semblerai qu'il y ai des problemes sous windows Vista car quand j'execute le code l'affichage est tres lent alors que si je passe sous windows XP/2000 il n'y a aucun probleme :/

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    bonjour, j'ai regardé ton code et il y aun truc qui m'a choqué c'est l'appel du repaint dans ta méthode paint()....
    en fait je suppose que le chat est censé bougé et que tu veux rafraichir l'ecran suite à un mouvement... mais je ne comprends pas pourquoi tu n'appel pas ce repaint() une fois que le chat a bougé ou une fois que ta caméra doit bouger (avancé....) ?

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    D'autant plus qu'un appel à repaint dans paint est conceptuellement dangereux: la méthode repaint appelant la méthode paint...
    Donc possibilité de boucle infinie...
    Donc supprime cet appel à repaint ça rique d'aller mieux

  9. #9
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    En fait c'est juste pour montrer que le chat sintille sinon l'image resterai fixe
    Bien sur apres je l'appelerai uniquement lorsque il y aura des modifications

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504

  11. #11
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Si je met un paint component j'ai une image grise :/

    En fait je pense qui faudrait creer l'image à afficher directement dans XplodedCanvas et la passer en paramettre à map et Character pour ecrire dessus sans que cela actualise l'image et actualiser l'image ensuite avec un drawImage sur _g mais j'arrive pas à faire ça

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    je ne comprends pas c'est quoi ton pb, j'ai rajouter à ton code un bouton et à chaque appui dessu on rafraichi l'image.... (je suis entre autre passé par un JPAnel qui contient ta map...)
    et bah je n'ai pas de scintillement....
    comment veut tu géré le rafraichisssment ? c'est une vidéo le bonhome se déplace aléatoirement ou c'est l'utilisateur qui le commande car si c'est le user, c'est pareil qu'avec mon bouton tu ne devrai pas avoir de scintillement...

  13. #13
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    C'est l'utilisateur qui déplace le personnage au clavier

    http://seb33300.free.fr/chat/index.html

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    en fait je ne suis pas sure d'avoir tout compris...
    lol
    Pourquoi il y a une attente que tu crée dans ta méthode paint() ? c'était juste pour nous mettre le code ou cela est vraiment comme ca dans ton code final ?
    car il n'y a pas besoin...
    des que tu detecte un deplacement et donc que tu mes à jour les coordonnées de ton chat, tu appel repaint et s'est tout...

  15. #15
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    J'ai mis à jour l'applet online en ne mettant le repaint que lors d'un mouvement.
    Certe le personnage ne sintille plus si il reste sur place mais des qu'on le déplace il resintille

    et à terme, j'espere avoir plusieurs personnages qui se déplacent dans le décord ce qui voudra dire que l'image sera réaffiché quasi tout le temps comme le repaint en boucle

    Donc plutot que de charger la map puis le personnge il faudrait trouver un moyen de charger les 2 en meme temps dans le buffer pour afficher ensuite l'image ce qui empechera le(s) personnage(s) de sintiller

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut,
    apparement tu as résolu ton probleme, Alors comment as tu fait ?

  17. #17
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Au départ il y avé la map qui dessiné sur l'applet puis le personnage donc quand la map se redessiné cela masqué le personnage qui se redessiné juste derriere.

    Donc l'astuce a été dans la classe qui instancié mon personnage et ma map de creer une image avec un buffer, et au lieu de dessiner directement sur l'applet avec mon personnage et la map j'ai dessiné sur le buffer.
    Une fois que le perso et la map ont été dessiné sur le buffer, j'affiche le buffer sur l'applet et donc on ne voi plus le sintillement car cela revient a afficher une seulle image en boucle.

    Tu peux trouver les dernieres sources ici si ça t'interesse :
    http://seb33300.free.fr/chat/13_05_2007.zip

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. repaint () qui redessine un composant de trop
    Par Gurdile dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/10/2013, 12h49
  2. Réponses: 2
    Dernier message: 19/09/2011, 19h39
  3. Réponses: 4
    Dernier message: 21/07/2008, 23h32
  4. [Debutant] repaint() qui ne se font plus
    Par Syrus dans le forum 2D
    Réponses: 4
    Dernier message: 12/01/2007, 12h07
  5. repaint qui marche pas
    Par burhud dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 12/11/2006, 19h11

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