> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retour de force dans GameInput

> Retour de force dans GameInput

Utilisez cette rubrique pour comprendre comment le retour de force dans `GameInput` peut gérer la sortie des appareils. Grâce au retour de force, les appareils d'entrée de jeu peuvent déplacer physiquement une ou plusieurs des commandes d'entrée de l'appareil pour fournir une rétroaction tactile à l'utilisateur. Le retour de force fonctionne avec les appareils d'entrée qui simulent la conduite de véhicules, comme les volants de course et les installations de simulation de vol. Ces appareils contiennent un moteur de retour de force qui applique une force à la commande le long d'un axe. Sur un volant de course, il s'agit d'une force de rotation qui fait tourner le volant pour simuler un scénario en jeu. Utilisez le retour de force avec une manette de vol pour rendre les leviers difficiles à pousser ou à tirer à partir d'une position donnée.

Pour plus d'informations sur les interfaces `GameInput` qui prennent en charge le retour de force, consultez [IGameInputDevice](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/igameinputdevice) et [IGameInputForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/igameinputforcefeedbackeffect).

## Vérifier la présence d'un moteur de retour de force

Pour créer un effet de retour de force, vous avez besoin de l'interface [IGameInputDevice](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/igameinputdevice) qui représente l'appareil d'entrée auquel vous voulez appliquer l'effet. Après avoir obtenu l'interface `IGameInputDevice`, vérifiez le nombre de moteurs de retour de force de l'appareil en examinant la structure [GameInputDeviceInfo](/fr-CA/reference/input/gameinput/structs/gameinputdeviceinfo). Pour ce faire, appelez [IGameInputDevice::GetDeviceInfo](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_getdeviceinfo). Si l'appareil d'entrée comporte un moteur de retour de force, le membre `ForceFeedbackMotorCount` de [GameInputDeviceInfo](/fr-CA/reference/input/gameinput/structs/gameinputdeviceinfo) a une valeur égale ou supérieure à un.

## Création d'un effet de retour de force

Si la structure [GameInputDeviceInfo](/fr-CA/reference/input/gameinput/structs/gameinputdeviceinfo) d'un appareil indique qu'il possède un ou plusieurs moteurs de retour de force, créez un effet de retour de force pour l'appareil en appelant [IGameInputDevice::CreateForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_createforcefeedbackeffect), comme le montre le code suivant.

```cpp theme={null}
HRESULT CreateForceFeedbackEffect(  
         uint32_t motorIndex,  
         const GameInputForceFeedbackParams* params,  
         IGameInputForceFeedbackEffect** effect  
) 
```

Le paramètre d'index du moteur est l'index du moteur touché par le retour de force. Cet index correspond au moteur approprié dans le tableau [GameInputForceFeedbackMotorInfo](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackmotorinfo) de la structure [GameInputDeviceInfo](/fr-CA/reference/input/gameinput/structs/gameinputdeviceinfo). Ce tableau contient des informations sur les moteurs de retour de force présents et sur leurs capacités.

Pour le deuxième paramètre, créez la structure [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams) de l'effet de retour de force, qui décrit les caractéristiques de l'effet, comme le montre le code suivant.

```cpp theme={null}
typedef struct GameInputForceFeedbackParams {  
    GameInputForceFeedbackEffectKind kind;  
    union  
    {  
        GameInputForceFeedbackConstantParams constant;  
        GameInputForceFeedbackRampParams ramp;  
        GameInputForceFeedbackPeriodicParams sineWave;  
        GameInputForceFeedbackPeriodicParams squareWave;  
        GameInputForceFeedbackPeriodicParams triangleWave;  
        GameInputForceFeedbackPeriodicParams sawtoothUpWave;  
        GameInputForceFeedbackPeriodicParams sawtoothDownWave;  
        GameInputForceFeedbackConditionParams spring;  
        GameInputForceFeedbackConditionParams friction;  
        GameInputForceFeedbackConditionParams damper;  
        GameInputForceFeedbackConditionParams inertia;  
    };  
} 
```

Choisissez une valeur de l'énumération [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind), puis initialisez la structure `GameInputForceFeedbackParams` correspondante.

Par exemple, pour créer un effet de rétroaction avec un comportement de ressort, [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams) se compose de la valeur `GameInputForceFeedbackSpring` de [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind) et de la structure [GameInputForceFeedbackConditionParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackconditionparams) pour un ressort. Remplissez les paramètres correspondant à la valeur de l'énumération [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind) choisie.

Après avoir sélectionné l'effet du moteur de retour de force à l'aide de son index et créé la structure [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams), appelez [IGameInputDevice::CreateForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_createforcefeedbackeffect) pour créer l'effet. Celui-ci est représenté par une interface [IGameInputForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/igameinputforcefeedbackeffect).

La durée de vie de l'effet de retour de force est associée à l'interface [IGameInputForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/igameinputforcefeedbackeffect) créée. Lorsque l'effet est créé, il est chargé dans l'appareil. Lorsque la dernière référence est libérée, l'effet de retour de force est arrêté et déchargé du moteur de l'appareil.

## Application et mise à jour des effets de retour de force

Lorsqu'un effet de retour de force est créé, il est chargé directement dans le moteur de l'appareil. Un moteur de retour de force dispose d'une quantité limitée de mémoire. Cela limite le nombre d'effets de retour de force qui peuvent être chargés et joués en même temps. Si vous appelez [IGameInputDevice::CreateForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_createforcefeedbackeffect) après avoir atteint cette limite, la fonction retourne une erreur.

Après sa création, un effet de retour de force est chargé dans le moteur de retour de force à l'état arrêté. Une fois qu'il est chargé, utilisez l'interface [IGameInputForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/igameinputforcefeedbackeffect) pour [définir l'état](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/methods/igameinputforcefeedbackeffect_setstate) de l'effet à `Running`. L'effet est alors joué sur le moteur de l'appareil.

### États d'un effet de retour de force

Un effet de retour de force passe par plusieurs états pour correspondre à l'état actuel du jeu. Il est important de mettre à jour l'état d'un effet et d'en prendre note en fonction de votre jeu afin de maintenir le comportement attendu.

Les états du retour de force peuvent être définis selon [GameInputFeedbackEffectState](/fr-CA/reference/input/gameinput/enums/gameinputfeedbackeffectstate), comme le montre le code suivant.

```cpp theme={null}
typedef enum GameInputFeedbackEffectState    
{  
    GameInputFeedbackStopped = 0,  
    GameInputFeedbackRunning = 1,  
    GameInputFeedbackPaused = 2  
} GameInputFeedbackEffectState  
```

Une fois l'effet de retour de force créé, il passe à l'état `Stopped`. Si un effet de rétroaction nouveau ou arrêté est défini à l'état `Running`, il est joué depuis le début. Si l'état est défini à `Paused`, l'effet de retour de force cesse d'agir sur le moteur. Toutefois, si un effet à l'état `Paused` est défini à `Running`, l'effet de retour de force reprend son modèle là où il s'était arrêté.

Arrêter un effet y met fin, mais vous pouvez le déclencher de nouveau plus tard. Par exemple, lorsqu'un utilisateur quitte un terrain accidenté dans un jeu de course. De même, la mise en pause d'un effet est utile dans les situations où le jeu ne change pas, mais où l'utilisateur veut naviguer dans l'interface utilisateur, comme un menu de pause.

Définissez l'état d'un effet de retour de force en appelant [IGameInputForceFeedbackEffect::SetState](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/methods/igameinputforcefeedbackeffect_setstate).

### Mise à jour d'un effet de retour de force

Ajustez le gain d'un effet de retour de force ou fournissez un nouvel ensemble de paramètres si la nouvelle structure [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams) partage la même valeur d'énumération [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind).

#### Gain

Modifiez l'intensité d'un effet de retour de force en ajustant son gain à l'aide de la fonction [IGameInputForceFeedbackEffect::SetGain](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/methods/igameinputforcefeedbackeffect_setgain), comme le montre le code suivant.

```cpp theme={null}
void SetGain(  
         float gain  
)  
```

Le gain peut être une valeur comprise entre 0 et 1. Par défaut, le gain d'un effet de retour de force est défini à 1. Cette fonction sert principalement à atténuer l'intensité d'un effet.

#### Définition de nouveaux paramètres

Fournissez de nouveaux paramètres pour un effet de retour de force à l'aide de la fonction [IGameInputForceFeedbackEffect::SetParams](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/methods/igameinputforcefeedbackeffect_setparams), comme le montre le code suivant.

```cpp theme={null}
bool SetParams(  
         const GameInputForceFeedbackParams* params  
)  
```

Lorsque vous utilisez cette fonction pour remplacer les paramètres d'un effet de retour de force, utilisez la même valeur d'énumération [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind) que celle de l'effet de retour de force dont vous définissez les paramètres. Les nouveaux paramètres prennent effet immédiatement et sont appliqués sans arrêter l'effet en cours. Notez que la minuterie de durée n'est **pas** réinitialisée si la valeur de durée ne change pas. Elle ne sera réinitialisée que si une valeur de durée différente est fournie, ou si l'effet est arrêté puis redémarré.

Si l'effet en cours est arrêté, il est redémarré avec les nouveaux paramètres. Certains jeux peuvent modifier les paramètres pour simuler différents modèles de rétroaction en définissant les paramètres d'un effet de rétroaction avec la valeur d'énumération [GameInputForceFeedbackEffectKind](/fr-CA/reference/input/gameinput/enums/gameinputforcefeedbackeffectkind) `GameInputForceFeedbackConstant`.

#### Différences de capacités entre les appareils GIP et HID

Sur console, tous les appareils utilisent le modèle de pilote GIP. Sur PC, les appareils peuvent utiliser le modèle de pilote GIP ou HID; l'installation de pilotes du fabricant les fait généralement passer en mode HID (sauf s'il existe un commutateur physique pour le contrôle manuel). Les capacités de retour de force des appareils HID sont limitées par l'API DirectInput pour laquelle ils ont été conçus à l'origine. GameInput fait tout son possible pour contourner ces limitations lorsque c'est possible. Néanmoins, certaines différences subsistent.

Les appareils HID limitent actuellement le retour de force à l'axe AngularX, peu importe les axes supplémentaires pris en charge par le matériel. Cette configuration offre une bonne prise en charge pour la grande majorité des volants de course.

Le retour de force HID est actuellement offert dans les versions 19H2 et ultérieures de Windows et sera mis à jour pour fonctionner dans la version 19H1 dans une prochaine mise à jour.

## Documentation de référence de l'API

* [GameInput (contenu de l'API)](/fr-CA/reference/input/gameinput/gameinput_members)
  * Structures
    * [GameInputDeviceInfo](/fr-CA/reference/input/gameinput/structs/gameinputdeviceinfo)
    * [GameInputForceFeedbackMotorInfo](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackmotorinfo)
    * [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams)
    * [GameInputForceFeedbackConditionParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackconditionparams)

## Voir aussi

[IGameInputForceFeedbackEffect](/fr-CA/reference/input/gameinput/interfaces/igameinputforcefeedbackeffect/igameinputforcefeedbackeffect)

[IGameInputDevice](/fr-CA/reference/input/gameinput/interfaces/igameinputdevice/igameinputdevice)


## Related topics

- [Interface de retour de force GameInput](/fr-CA/build/core-features/common/input/hardware/input-hardware-force-feedback.md)
- [Rubriques avancées sur GameInput : retour de force et rappels](/fr-CA/build/core-features/common/input/advanced/index.md)
- [GameInputForceFeedbackConditionParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackconditionparams.md)
- [GameInputForceFeedbackParams](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackparams.md)
- [GameInputForceFeedbackMotorInfo](/fr-CA/reference/input/gameinput/structs/gameinputforcefeedbackmotorinfo.md)
