Emuler un joystick avec la souris

Résolu
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 - 14 mars 2009 à 17:43
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 9 avril 2009 à 16:11
Salut.

Il existe une certain nombre de programmes qui permettent de contrôler la souris à l'aide d'un joystick ou d'un joypad. Je souhaiterais pouvoir faire l'inverse. C'est-à-dire que les mouvements de mon trackball émulent ceux du stick analogique d'un joypad et que les deux clics de mon trackball émulent deux des boutons du joypad. Vous vous demandez certainement pourquoi. Et bien parce que je suis une personne handicapée qui peut seulement utiliser un trackball et ses deux boutons pour contrôler son ordinateur. Il se trouve que j'adore les jeux de course de voitures, mais vu que 99% d'entre eux sont uniquement jouable au clavier ou au joystick/joypad , je ne peux plus y jouer. Les jeux comme les GTA (sauf le dernier) permettent de contrôler la direction des véhicules avec la souris. Le seul problème c'est qu'il n'y a aucun indicateur visuel permettant de savoir dans quelle direction sont orientées les roue du véhicule. Avec un joystick, c'est simple, quand on le laisse a sa position 0, les roue sont droite. Vu que la souris ne revient pas toute seule à sa position 0, c'est pas très pratique. Ce que je voudrais risque de pas être simple à programmer. Petite précision, pour contrôler mon clavier, je dispose d'un clavier à défilement que j'utilise avec un seul contacteur. C'est pratique pour par exemple faire Echap dans un jeu mais c'est bien trop lent pour jouer à un jeux de voiture. Voici mon idée (dites moi si ça vous parait faisable) :
imaginons un programme qui fonctionne en arrière plan du jeux, que l'on active ou désactive grâce à une combinaison de touches. Quand il est désactivé, la souris fonctionne normalement et quand il est activé la souris émule le joystick. Ca c'est la première partie , mais la suite risque d'être plus compliqué. Tout d'abord, est-il possible d'afficher par dessus un jeux DirectX en plein écran des graphismes ou des caractères ? Je pense que oui car le programme FRAPS permet par exemple d'afficher le nombre d'images par secondes d'un jeu DirectX dans un coin de l'écran. Imaginons que l'on fasse apparaitre sur l'écran une croix graduée horizontalement et verticalement avec un point qui se déplace en fonction des mouvement du trackball. Quand le point est au centre de la croix, le joystick émulé est à la position 0 (le véhicule a les roues droites et est au point mort). Quand le point se trouve tout en haut à gauche le véhicule accélère à fond et tourne au maximum vers la gauche. Cela émulerait donc parfaitement un stick analogique et on aurait un repère visuel pour l'accélération, le freinage et la direction. Les deux clics du trackball pourrait servir par exemple pour activer la nitro et changer de vue. Mon message est très long mais je voulais être assez précis sur mon idée. Si vous pensez que c'est faisable, dites-le moi. Si oui, est-ce que certains d'entre vous se sentirais de le programmer. Si vous y arriviez, ce serait vraiment génial. Je pourrais le passer à mes amis handicapés et le diffuser sur internet pour tout les autres (en vous citant et en vous remerciant bien sûr). Merci d'avoir pris le temps de me lire.

Bye.

44 réponses

Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
16 mars 2009 à 23:24
J'ai trouvé ça, et en plus c'est pour Delphi :
http://tcharles.developpez.com/simul/?delphi=1
1
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
14 mars 2009 à 18:36
Je crois comprendre : en fait, tu voudrais que quand on tourne la molette vers le haut, le véhicule tourne à gauche, et vice-versa ?

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 11:39
Salut Bacterius.

J'utilise un trackball avec seulement une boule et deux boutons (donc sans molette ni autre boutons). Je voudrais que quand je fais rouler la boule de mon trackball vers le haut, le véhicule accélère (comme si je poussais le stick analogique d'un joypad vers le haut). Je voudrais que quand je fais rouler la boule de mon trackball vers le bas, le véhicule freine (comme si je poussais le stick analogique
d'un joypad vers le bas). Je voudrais que quand je fais rouler la boule de mon trackball vers la droite, le véhicule tourne vers la droite (comme si je poussais le stick analogique
d'un joypad vers la droite). Je voudrais que quand je fais rouler la boule de mon trackball vers la gauche, le véhicule tourne vers la gauche (comme si je poussais le
stick analogique
d'un joypad vers la gauche).
Je pourrais donc diriger le véhicule uniquement avec la boule de mon trackball.

Bye.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 12:51
Ah oui, désolé je n'avais pas vu Trackball, je pensais souris.
Ben déjà, juste sur le côté "comment faire", on peut déjà imaginer qu'on se place dans un repère d'origine 0;0 avec un point de mouvement aussi à 0;0 quand tu démarres une course (par exemple). Comme ça, quand tu bouges la boule, ça fera bouger le point selon le mouvement que tu as fait sur la boule. Ensuite, on interprêtera le changement de position du point sur l'axe des abscisses et des ordonnées pour mesurer à combien tu as déplacé ton point vers la gauche-droite, et vers le haut-bas.
Voilà pour "comment faire".
Après, "comment le coder" c'est autre chose. Il faudrait déjà se renseigner sur comment Windows gère le périphérique Trackball, pour voir les messages que la trackball envoie vers le système, et les intercepter et les interprêter. Ensuite, il faudra faire de même pour le joystick. A ce moment là, on pourra commencer à émuler la trackball en joystick petit à petit.
Pour ce qui est de l'affichage au dessus des jeux DirectX, je pense que c'est tout à fait possible en dessinant directement sur l'écran.
Voilà à quoi je pense directement.

Cordialement, Bacterius !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 14:10
Salut Bacterius.

Tu as parfaitement compris ce que je voulais. J'ai un trackball branché en USB.
Il est détecté par windows comme une souris USB standard. Quand on pousse une souris à boule vers le haut, la boule tourne vers le haut comme quand je fais rouler la boule de mon trackball vers le haut. Je pense donc que les messages que le trackball envoie au système sont les même que ceux qu'une souris standard envoie. J'utilise un driver Logitech "Mouseware" qui permet de régler une sensibilité élevée. C'est un trackball avec un capteur optique qui détecte les mouvements de la boule. Merci de ton aide.

Bye.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 14:33
Eh bien c'est déjà ça qu'on aura pas à faire.
Plus qu'à regarder le protocole de communication d'un joystick générique, plus à voir comment on peut intercepter tout ça avec un hook.

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 15:21
J'ai trouvé un truc intéressant sur la gestion des joysticks par windows. Bon, ça date de Novembre 2002 et c'est en langage C, mais ça devrai pouvoir nous aider. C'est à cette adresse : "http://tcharles.developpez.com/joystick/". Je vais continuer à chercher d'autres infos sur le net. Merci à toi.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 15:34
Bravo tu viens de trouver la perle rare, tout y est.
Je finis de coder mon truc sur lequel je bosse, je le mets vite en ligne et je me penche sur ce site.

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 15:34
Cette adresse aussi à l'air intéressante :
"http://msdn.microsoft.com/fr-fr/library/bb727297.aspx".
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 15:49
Ce qui est un peu pénible c'est que je n'ai ni trackball ni joystick, donc pour tester ça va être difficile. Enfin on va partir du principe que de chaque ligne de code que j'écrirai émanera une vérité et une puissance infinies ... ^^ (pas mal la phrase).

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 16:19
Quel poète ce Bacterius alors !
Franchement si on y arrive (enfin surtout toi car je n'y connais pas grand chose en programmation, nous dirons que l'on collabore à le conception de ce programme), ça permettrai à mes amis et moi (ainsi qu'un grand nombres d'autres personnes handicapées) de jouer à des jeux de courses de voitures seul ou en réseau. Tu nous rends vraiment un grand service en m'aidant. Personne n'a apparemment au l'idée de faire un programme de ce genre. En tout cas, merci beaucoup.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 16:27
Ouais ben c'est pas sûr que j'y arrive, vu le peu de visibilité que j'ai sur ce domaine, autant du point de vue logiciel que matériel (rho la la je me surpasse là !), donc je vais m'y mettre et voir ce que je peux faire (en plus ça me fera la main sur un nouveau thème que je n'ai jamais encore abordé).

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 17:17
Salut,

Alors voici ce qu'on doit faire tout d'abord :

- Faire croire au système qu'un joystick est installé dans le système (c'est le point le plus délicat je pense).

- Intercepter les mouvements de la souris et faire croire au système qu'il s'agit de mouvements de joystick.

- Faire une petite interface graphique et régler les derniers détails (ne démarrer l'émulation que quand on lance le jeu, etc ...).

Ce n'est pas facile du tout, donc il faut vraiment s'y atteller.

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 18:35
On pourrait faire en sorte que quand le programme se lance, il soit réduit automatiquement dans la barre de notification avec une icône rouge indiquant qu'il n'est pas actif. Ensuite pour l'activer ou le désactiver il suffirait d'utiliser une combinaison de touches. L'icône deviendrais verte quand le programme est actif. Le système de l'icône de couleur, c'est surtout pour faire classe :-). Le jeux Trackmania utilise par exemple le joystick pour conduire et la souris pour modifier les circuits. On pourrait donc facilement passer de la souris à l'émulation joystick tout en restant dans le jeux.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 18:41
Tout à fait mais ça c'est le côté facile :/
Ce qu'il faut déjà réussir c'est faire croire au système qu'il y a bien un joystick dans le système (parce que acheter un joystick pour ne pas l'utiliser et juste s'en servir pour occuper le port de manette pour pouvoir utiliser les messages joystick ... bon ...).

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 18:55
Quand on ferait un double-clic sur l'icône dans la barre de notification, une fenêtre de configuration s'ouvrirait. On pourrait y modifier la combinaison de touche d'activation/désactivation, la sensibilité de déplacement du point de contrôle, la couleur de la croix, la position de la croix sur l'écran, etc...
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 18:56
Oui ... mais ça ce sont des détails ... la finition quoi. Il faut d'abord faire le squelette et c'est le plus dur :-)

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 18:58
Au fait, j'ai un joystick USB qui ne me sert pas.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
15 mars 2009 à 19:00
Ah ben parfait ! Maintenant on n'a même plus besoin de faire croire au système qu'il y a un joystick puisqu'il y en a vraiment un. En fait on va s'en servir :

Mouvement de trackball => Interprétation du mouvement => Message "le joystick a bougé dans tel sens" dans tout le système => Voiture qui tourne ;)

Cordialement, Bacterius !
0
Sweb167 Messages postés 25 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 8 avril 2009 1
15 mars 2009 à 19:20
Si j'ai bien compris, il faut savoir quelles sont les données envoyés par le joystick au jeu. Notre programme enverrait alors ces données au jeu en fonction des déplacements du point de contrôle sur la croix affichée à l'écran. Le point tout en haut de la croix indiquerait un appuis à 100% vers le haut du joystick et donc une accélération maximale du véhicule. Il en serait de même pour le freinage et les directions. Les deux boutons de la souris émuleraient les deux premiers boutons du joystick qui serviraient par exemple au frein à main et au changement de vue.
0
Rejoignez-nous