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 :

mouseMoved -> pertes ou événements non déclenchés


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut mouseMoved -> pertes ou événements non déclenchés
    Bonjour,

    Je suis nouveau ici et je souhaite développer un petit simulateur de guitare ( où la souris gratte les cordes et le clavier permet de les pincer, simple au début :p)
    Je rencontre un soucis au niveau des évenements liés aux cordes. Lorsque que la souris passe sur une corde (Y de la souris == Y de la corde pour l'instant) elle lance un thread de calcul de vibration. Chaque corde a sa gestion d'événements (MouseMotionAdapter) que j'ajoute une à une à la frame ou la guitare est dessinée (addMouseMotionListener(laCorde.GestionEvt) pour chaque corde). le tout marche trés bien, seulement lorsque que je passe le curseur trop vite (et encore pas tant que ça) l'événement est oublié ou perdu je sais pas. J'ai déjà chercher longement sur internet ce genre de problème, sans succés. Code moisi ? pertes inévitables ? évitables ?
    Si ce projet interesse quelqu'un je suis tout disponible

    Voici le code en dégrossi :
    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
     
    class Guitare extends Observable {
        [...]
        private List<Corde> sesCordes;
        [...]
    }
     
    class Corde extends Observable { 
        [...]
        private class GestionEvt extends MouseMotionAdapter {
     
            public void mouseMoved(MouseEvent e) {
                if( e.getY() == this.sonPoint1.get_sonY() ) { // ici il y a des pertes
     
                    calculVibration(); // lance un thread
                    mettreAJour(); // redessine la guitare
                }
            }
        }
        [...]
    }
     
    class Main extends JFrame implements Observer {
        [...]
        public Main() {
            [...]
    	  uneGuitare = new Guitare();
            [...]
            for(Corde uneCorde : uneGuitare.get_sesCordes()) {
                addMouseMotionListener(uneCorde.get_saGestionEvt());
            }
            [...]
        }
    }
    Mci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    En fait j'ai le même soucis pour le clavier , chaque intersection de corde et de case de la guitare sont associées a une touche du clavier et possède un KeyAdapter. Ca marche mais trés aléatoirement, souvent il n'en prend que 2 ou 3 à la fois. Si je reste appuyé sur 3 touches et que j'essaye d'appuyer sur une autre touche par exemple, il ne se passe souvent rien.
    (je teste en disant au graphique d'afficher un cercle à l'endroit de l'intersection si estAppuye == true)
    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
     
    class Corde_Case extends Observable {
         [...]
            private class GestionEvt extends KeyAdapter {
     
                    public void keyTyped(KeyEvent e) {
                        if(e.getKeyChar() == saTouche) {
                            estAppuye = true;
                            mettreAJour();
                        }
                    }
                    public void keyReleased(KeyEvent e) {
                        if(e.getKeyChar() == saTouche) {
                            estAppuye = false;
                            mettreAJour();
                        }
                    }
            }
         [...]
    }

  3. #3
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Pour les cordes et la souris.

    Le problème qui se pose c'est qu'en déplaçant la souris rapidement, elle ne passe pas par tous les pixels de son dléplacement (D'ailleurs ça se voit à l'écran.)

    Une solution serait de surveiller en permanence le curseur et de jouer une corde si l'instant d'avant il était de l'autre côté de la corde. Mais dans cette solution, attention au cas ou la souris est SUR la corde
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  4. #4
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Pour le clavier, Je ne crois pas qu'il y ait vraiment de solution.

    Essaye rien que dans le bloc note d'appuyer sur plus de 3 touches, les lettres ne s'afficheront pas.
    Donc pour ce problème, rien à voir avec JAVA.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Mci pour les infos D'ailleurs un truc marrant pour le clavier (blocnote par exemple) c'est que si j'appuie sur deux touches cote à cote horizontalement ça marche alors que 3 horizontalement ça marche pas, comme tu disais (ça doit être un bloquage au niveau du circuit imprimé du clavier). mais si j'appuie sur 3 ou 4 touches verticalement ou un peu n'importe ou, là ça marche :/ effectivement ça n'a rien a voir avec java. Mais jmen fou parceque heureusement appuyer sur plusieurs endroits d'une meme corde d'une guitare c'est stupide

    Jvais potasser tout ça pour la souris, mci encore

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Solution
    Voila une solution possible, marche à 100%, mci à toi
    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
     
    private class GestionEvt extends MouseMotionAdapter {
     
            private int sonXMouse = 0;
            private int sonYMouse = 0;
     
            public void mouseMoved(MouseEvent e) {           
     
                if( e.getY()       >= sonPoint1().get_sonY() &&
                     sonYMouse  <= sonPoint1().get_sonY() ||
                     e.getY()       <= sonPoint1().get_sonY() &&
                     sonYMouse  >= sonPoint1().get_sonY() ) {
                    calculVibration();
                    mettreAJour();
                }
     
                sonXMouse = e.getX();
                sonYMouse = e.getY();
            }
        }
    ce système me permet en plus de connaitre l'intensité du frappé de la corde !

  7. #7
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Citation Envoyé par karibouk
    Mais jmen fou parceque heureusement appuyer sur plusieurs endroits d'une meme corde d'une guitare c'est stupide
    Si tu veux gérer les Hammer et les pull-off, ça aura un sens


    Et puis si tu veux faire un barret. Tu fais comment avec tes 4 touches ?
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    bien sur que je vais les gerer ça sera en restant appuyé sur le bouton de droite de la souris, pour le reste je trouverais bien une solution. Pour ce qui est du barret c'est possible car jpeux en avoir 4 verticalement max en mm temps et 2 horizontalement max en mm temps, ma guitare est représentée horizontalement, avec une grille de touches paramétrables de ce style :

    {{ '&','é','"','\'','(','-','è','_','ç','à' }, >> cette ligne est une corde
    { 'a','z','e','r','t','y','u','i','o','p' },
    { 'q','s','d','f','g','h','j','k','l','m' },
    { 'w','x','c','v','b','n',',',';',':','!' }}

    les colonnes sont des cases

    et si j'enfonce les touches é,z,s,x et d,r, ça marche mais si je veux rajouter la touche f en mm temps, elle n'est pas lue.

    En tous cas j'avance trés vite maitenant. Je te tiens au courant de l'évolution si tu veux .

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

Discussions similaires

  1. [Graphics View] Évènement QGraphicsItem non déclenché
    Par Inouee dans le forum Qt
    Réponses: 6
    Dernier message: 26/02/2010, 11h30
  2. Gestionnaires d'évènements non déclenchés
    Par Sylvain James dans le forum XMLRAD
    Réponses: 7
    Dernier message: 19/04/2006, 18h14
  3. Quel événement est déclenché quand on passe d'un enregist...
    Par pyxosledisciple dans le forum Access
    Réponses: 1
    Dernier message: 21/01/2006, 10h40
  4. perte d'événement Javascript
    Par mcrbe dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/12/2005, 11h37
  5. faire attendre un programme qu'un événement se déclenche
    Par fabrisss dans le forum API standards et tierces
    Réponses: 20
    Dernier message: 21/10/2005, 15h34

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