#1 

03-11-2006 16:22:49

Agar
Membres
Avatar de Agar
Date d'inscription:
Messages: 16
IP: 86.67.159.182
Courriel


/*
* TUTORIAL: Utilisation d'un Joystick/Joypad en C#
*
* Ecrit par Ambroise Garel (agar@cafedefaune.com) pour Irrlicht.fr
*
* Irrlicht n'a pas beaucoup de défauts, mais son absence de fonctions permettant l'usage d'un
* joystick en est un.
*
* Bien évidemment, on peut utiliser DirectInput, mais il existe un moyen bien plus simple de
* lire les coordonnées et les boutons d'un controleur de jeu sous Windows.
*
* Cette petite classe fait tout le travail pour vous.
*
* */



// Important: pour l'appel à des DLLs contenant du code non managé.

using System.Runtime.InteropServices;

public class JoystickReader
{
[DllImport("winmm.dll")]
private static extern int joyGetPos(int uJoyID, ref JOYINFO pji);

private const int MAXJOYBUTTONS = 16;

private int joystick_id;

private struct JOYINFO
{
public int wXpos;
public int wYpos;
public int wZpos;
public int wButtons;
}


// Constructeur: passez en paramètre l'ID du joystick dont vous souhaitez lire les informations.
// Si vous n'avez qu'un seul joystick, c'est pas compliqué, son ID est zéro.
// Sinon, vous devrez expérimenter : ça commence à 0 et ça finit à "nombre de joysticks - 1"

public JoystickReader(int joyid) { joystick_id = joyid; }



// Fonction GetJoy, à appeler dans la boucle principale de votre programme, en lui passant
// en paramètres 4 valeurs:
// - Un tableau (d'une seule dimension) de booléens, qui vous dira si tel ou tel bouton est
// appuyé (true) ou relaché (false)
// - Trois entiers, les axes X, Y et Z du joystick.
// Si votre joystick est "au repos" (centré) sur un axe, la valeur sera 32767.
// Si le joy est poussé à fond dans une direction, vous aurez 0 ou 65535 (selon le sens).
// * Avec un controleur analogique (comme un joystick),
// toutes les valeurs intermédiaires sont possibles.
// * Avec un controleur digital (comme un joypad de base),
// les valeurs sont toujours 0, 32767 ou 65535 (il n'y a pas d'intermédiaire)
//
// La fonction retourne "true" si ça c'est bien passé, "false" s'il y a eu un problème
// (par exemple s'il n'y a pas de joystick répondant à cette ID).

public bool GetJoy(out bool[] joybuttons, out int axis_x, out int axis_y, out int axis_z)
{
JOYINFO JoyInformation = new JOYINFO();

joybuttons = new bool[MAXJOYBUTTONS];

if (joyGetPos(joystick_id, ref JoyInformation) != 0)
{
axis_x = 0;
axis_y = 0;
axis_z = 0;
return false;
}

for (int i = 0; i < MAXJOYBUTTONS; i++)
joybuttons = (((int)Math.Pow(2, i) & JoyInformation.wButtons) != 0);

axis_x = JoyInformation.wXpos;
axis_y = JoyInformation.wYpos;
axis_z = JoyInformation.wZpos;

return true;
}
}


Hors ligne


#2 

03-11-2006 16:37:48

Copland
Modérateurs
Date d'inscription:
Messages: 657
IP: 90.16.141.98
Courriel  Site web

Un code vraiment utile !!!
Merci beaucoup pour cette deuxième contribution smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#3 

04-11-2006 11:09:45

kedu
Modérateurs
Avatar de kedu
Date d'inscription:
Messages: 155
IP: 213.44.86.234
Courriel

Merci beaucoup !!

Disons que c'est tellement pratique et facile à intégrer que c'est le genre de chose à mettre toute suite dans une librairie perso...

On peut ? ^^


Hors ligne


#4 

05-11-2006 00:10:29

Agar
Membres
Avatar de Agar
Date d'inscription:
Messages: 16
IP: 86.67.159.31
Courriel

kedu Ecris:

C'est tellement pratique et facile à intégrer que c'est le genre de chose à mettre toute suite dans une librairie perso...
On peut ? ^^

Vous voulez faire quoi exactement? Créer une librairie de fonctions téléchargeable depuis ce site?

Si c'est le cas, c'est une excellente idée. N'hésitez pas à y inclure mon code.


Hors ligne


#5 

05-11-2006 00:36:28

kedu
Modérateurs
Avatar de kedu
Date d'inscription:
Messages: 155
IP: 89.86.113.204
Courriel

Merci !!

Oui effectivement on exclut pas d'entreprendre ce genre de chose à long terme... (quelques projets avant ^^)


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
185 invités en ligne
membre en ligne: -
RSS Feed