Salut,
J'ai des petits problemes de gestion de souris. Je voudrai repérer les doubles clic avec glut ainsi que les clic ou la personne reste appuyé sur le bouton de la souris. Quelqu'un sait comment faire?
Merci
Salut,
J'ai des petits problemes de gestion de souris. Je voudrai repérer les doubles clic avec glut ainsi que les clic ou la personne reste appuyé sur le bouton de la souris. Quelqu'un sait comment faire?
Merci
Pour ce qui est de savoir si l'utilisateur reste appuyé sur le bouton de la souris il faut que tu contrôles l'état du bouton et que tu affectes une variable booléenne en conséquence.
Code python : 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 left_button = 0 def mouseFunc(*args): global left_button ... if args[0] == GLUT_LEFT_BUTTON: if args[1] == GLUT_DOWN: left_button = 1 else: left_button = 0 ... def main(): ... glutMouseFunc(mouseFunc) ...
Code c++ : 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 bool left_button = false void mouse(int button, int state, int x, int y) { if(button == GLUT_LEFT_BUTTON) { if( state == GLUT_DOWN ) left_button = true; else left_button = false; } } int main(int argc, char** argv) { ... glutMouseFunc(mouseFunc); ... }
Pour le double clic, à mon souvenir, il faut le faire à la main, en pseudo code cela ressemblerait à ceci:
Le timer permet de lancer la gestion du clic après x+1 millisecondes par exemple...
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 Fonction GestionClicSimple Arrêter le timer (si nécessaire) Gestion de l'autre clic (si nécessaire) Mettre le timer en place Enregistrer temps du clic et position Fin Fonction GestionDoubleClic Faire ce que tu veux Fin Fonction EvenementClic Si un autre clic c'est produit il y a moins de x millisecondes ET la position est identique (ou presque) alors Arrêter le timer GestionDoubleClic Sinon GestionClicSimple Fin Si Fin
Jc
Ok merci pour le double clic ca marche. En ce qui concerne le simple clic enfait ca marche mais c'est ce que j'avais deja fait. Ce qui m'interesse enfait c'est de pouvoir faire la difference entre un clic simple et un clic ou il reste appuyé. Il faut le faire à la main comme le double clic en jouant sur le temps?
Ce qui caractérise un clic c'est l'ensemble de 2 mouvements la pression de la touche et le relachement donc en théorie si tu presses la touche, que tu la maintient enfoncée et que tu la relache : c'est un clic.
Je pense qu'il y a plusieurs manières de les différencier, tout dépend de l'utilisation que tu veux faire de ces différentes actions.
Désolé, j'ai loupé cette partie de la question, non, il y a 2 fonctions dédiées pour le mouvement de la souris:Envoyé par drcd
La première est lorsque la souris bouge avec un ou plusieurs boutons appuyé(s) et l'autre lorsque la souris bouge et aucun bouton n'est appuyé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void glutMotionFunc( void (* callback)( int, int ) ); void glutPassiveMotionFunc( void (* callback)( int, int ) );
Les paramètres sont bien sûr la position actuelle de la souris et donc il faut mettre en mémoire globale (beurk) quelque part quel bouton a été appuyé si tu dissocies les boutons...
Inutile de dire que le code de ces fonctions callback doivent être rapides sinon tu vas détruire l'efficacité et la rapidité de ton programme...
Jc
Mais ces fonctions aussi je les utilise deja. Bon je vais expliqué mon projet ca ira peut etre mieux. Enfait je veux faire un moteur 3D. Pour l'instant la partie 2D:sprite,clavier et son fonctionnent. Et je suis sur la souris. Mon moteur est organisé en classe donc j'ai pas de variables globales. Ma classe Mouse a 4 fonctions qui remplissent les données de classe:
-Manage():Utilisé pour mettre à true ou a false les données membres indiquant le simple et le double clic.
-ManageEntry(): utilisé pour dire si le pointeur de la souris est dans la fenetre ou pas(peu d'utilité mais ca coute rien de l'implementer)
-ManageMotion():utilisé pour le drag n drop(pour l'instant c'est elle qui met a true ou a false les données membres indiquant si un bouton reste appuyé ou non.
-ManagePassiveMotion():Recupere la position de la souris à tout moment
Le probleme c'est que il se peut que le joueur reste appuyé sans qu'il bouge la souris. Et à ce moment la mon moteur detecte un clic simple et non un clic ou il reste appuyé.
Partager