> ## 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.

# Modification des dispositions de contrôles tactiles en fonction de l'état du jeu

> Modification des dispositions de contrôles tactiles en fonction de l'état du jeu

Les jeux ont la possibilité de changer la disposition tactile affichée au joueur ou de modifier l'état utilisé par une disposition actuellement affichée. Les deux méthodes peuvent être utilisées ensemble pour créer l'expérience la plus naturelle pour les joueurs.

**[Changer de disposition](#change_layout)**

Il convient de changer de disposition dans les cas suivants :

* Transition entre différents schémas de contrôle (par exemple, conduite d'un véhicule et jeu de tir à la première personne)
* Masquage temporaire de la disposition tactile (pour offrir une expérience entièrement tactile, activer une expérience cinématique, etc.)

**[Changer l'état](#change_state)**

Il convient de modifier l'état du jeu inclus dans la partie contexte du bundle d'adaptation tactile dans les cas suivants :

* Modification des images/icônes des contrôles en fonction de l'état actuel du jeu du joueur. Voici quelques exemples :
  * Changer l'image du bouton de tir en fonction de l'arme sélectionnée par le joueur.
  * Changer les images des capacités en fonction des objets que le joueur possède actuellement dans son inventaire.
* Modification de l'état visuel (visibilité et activation) des contrôles en fonction de l'état actuel du jeu du joueur. Voici quelques exemples :
  * Désactiver le bouton de rechargement lorsque le joueur n'a plus de munitions supplémentaires.
  * Rendre le bouton d'interaction visible lorsque le joueur s'approche d'un objet avec lequel il peut interagir (et invisible lorsqu'il s'en éloigne).

<a id="change_layout" />

## Changement de disposition au moment de l'exécution

**Affichage d'une disposition spécifiée**
Le jeu doit utiliser l'API [`XGameStreamingShowTouchControlLayout`](/fr/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrollayout) pour afficher une nouvelle disposition.

**Masquage de la disposition actuelle**
Le jeu doit utiliser l'API [`XGameStreamingHideTouchControls`](/fr/reference/system/xgamestreaming/functions/xgamestreaminghidetouchcontrols) pour masquer la disposition actuellement affichée.

Exemple de la façon dont un jeu peut définir la disposition en fonction de l'état actuel du jeu :

```C++ theme={null}
void OnGameStateChanged(GameState newState)
{
    // Toggle to the set of touch overlay controls which best match the new state of the game
    switch (newState)
    {
    case GameState::FirstPersonAction:
        XGameStreamingShowTouchControlLayout("FirstPersonAction");
        break;
    case GameState::Driving:
        XGameStreamingShowTouchControlLayout("Driving");
        break;
    case GameState::CutScene:
        // Don't show any touch overlay controls while the cut scene is rendering
        XGameStreamingHideTouchControls();
        break;
    }
}
```

<a id="change_state" />

## Changement d'état au moment de l'exécution

L'état initial au lancement du jeu est défini par l'[état par défaut](/fr/build/core-features/common/game-streaming/game-streaming-touch-touch-adaptation-bundle#context) inclus dans le bundle d'adaptation tactile. Dans la disposition de contrôles tactiles, le contrôle doit référencer l'état pour la propriété susceptible d'être modifiée au moment de l'exécution.

Le jeu peut utiliser l'API `XGameStreamingUpdateTouchControlsState` pour mettre à jour l'état pendant l'exécution.

Par exemple, le code suivant permet d'avoir un contrôle « reload » (recharger) qui est désactivé au départ, mais qui est activé lorsque le joueur doit disposer de cette capacité.

```JSON theme={null}
//Example context file
{
  "$schema": "https://raw.githubusercontent.com/microsoft/xbox-game-streaming-tools/main/touch-adaptation-kit/schemas/context/v3.0/context.json",

  "state": {
    "enableReload": false
  }
}

//Example control in the layout:
{
    "type": "button",
    "action": "leftBumper",
    "enabled": {
        "$ref": "../../context.json#/state/enableReload"
    }
    ...
}
```

Le jeu effectuerait les appels d'API pour mettre à jour l'état :

```C++ theme={null}

// In this example, after the player has switched their active weapon - the game updates the
// enabled state of reload based on whether the player has extra magazines.
//
// Assumes passing in game structure that includes the active weapon with appropriate state.
//

void GameStreamingClientManager::UpdateStateAfterItemsChange(const playerWeapon& playerWeapon)
{
    // create an update for whether the reload button should be enabled
    XGameStreamingTouchControlsStateOperation reloadEnabled;
    reloadEnabled.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    reloadEnabled.path = "/enableReload";
    reloadEnabled.valueKind = XGameStreamingTouchControlsStateValueKind::Bool;
    reloadEnabled.booleanValue = playerWeapon.activeWeapon.reloadClips > 0;

    // combine all the updates into the update state call and make the call
    XGameStreamingTouchControlsStateOperation[1] updateOperations = {reloadEnabled};

    XGameStreamingUpdateTouchControlsState(updateOperations, _countof(updateOperations));
}
```


## Related topics

- [XR052 Emplacement, itinérance et dépendances de l'état utilisateur et des sauvegardes du titre](/fr/publishing/certification/fma/xr-052.md)
- [XR-052 Emplacement, itinérance et dépendances de l'état utilisateur et des sauvegardes de titre](/fr-CA/publishing/certification/xr/xr-052.md)
- [XR052 Emplacement, itinérance et dépendances de l'état utilisateur et des sauvegardes de titre](/fr-CA/publishing/certification/fma/xr-052.md)
- [Historique des modifications des exigences XBOX et des cas de test](/fr-CA/publishing/certification/xr-change-history.md)
- [Cas de test les plus souvent en échec](/fr-CA/publishing/certification/xr-top-failing.md)
