Les joysticks et joypads se gèrent de la même manière. Plusieurs étapes sont nécessaires afin de pouvoir les gérer :
Nous allons ici rechercher tous les controleurs de jeux qui sont installés à l'aide de la méthode GetDevices() de la classe Manager et instancier l'objet Device au controleur désiré. L'exemple qui suit sélectionne le premier controleur rencontré :
// Enumère les contrôleurs installésforeach(DeviceInstance instanceinManager.GetDevices(DeviceClass.GameControl,
EnumDevicesFlags.AttachedOnly)) {// Instancie le device avec le premier contrôleurthis._deviceJoystick =newDevice(instance.InstanceGuid); }
On initialise ici le format de données à celui du joystick à l'aide de la propriété SetDataFormat :
_deviceJoystick.SetDataFormat(DeviceDataFormat.Joystick);
Les niveaux de coopérativité sont les mêmes que le clavier : Exclusive / NonExclusive et Foreground / Background :
CooperativeLevelFlags _coopLevel; _coopLevel = CooperativeLevelFlags.Exclusive; _coopLevel |= CooperativeLevelFlags.Foreground;
On applique ensuite ces paramètres au device à l'aide de la méthode SetCooperativeLevel() prenant en paramètre la Form utilisée par l'application et le CooperativeLevel :
_deviceJoystick.SetCooperativeLevel(this, _coopLevel);
Certaines manettes comme le joystick étant analogique, nous devons définir la variation des axes correspondant à leur sensibilité. L'exemple qui suit énumère tous les objets du joystick et fixe une variation comprise en -1000 et +1000 pour chaque axe :
// Enumération des objetsforeach(DeviceObjectInstance DOIin_deviceJoystick.Objects) {if(((DOI.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)) {// On fixe la variation de l'axe._deviceJoystick.Properties.SetRange(ParameterHow.ById, DOI.ObjectId,newInputRange(-1000, +1000)); } }
La méthode SetRange() prend trois paramètres :
On obtient l'accès au device grâce à la méthode Acquire(). Suivant les CooperativeLevel que vous avez sélectionnés, si la fenêtre perd le focus l'acquisition peut être perdue.
_deviceJoystick.Acquire();
Pour les manettes, la première étape est de mettre à jour les infos du device grace à la méthode poll(). Pour éviter toute erreur (device non "acquit"), placez le dans un try() catch() et essayez de le réacquérir :
_deviceJoystick.Poll();
Nous allons ensuite stocker l'état de la manette afin de récupérer les propriétés tel que la position sur l'axe des X et l'état des boutons :
// Récupération de l'état de la manette JoystickState _etatJoystick = _deviceJoystick.CurrentJoystickState;// Récupération des propriétésint_x = _etatJoystick.X;// Récupération de l'état des boutonsint_bouton = 0;string_boutonsAppuyes;foreach(bytebin_etatJoystick.GetButtons()) {// On vérifie si le bouton est enfoncéif(0!= (b & 0x80)) _boutonsAppuyes += _bouton.ToString("00 "); _bouton++; } System.Windows.Forms.MessageBox.Show("X = " + _x.ToString() + \nBoutons : " + _boutonsAppuyes);