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

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

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

Les jeux peuvent changer la disposition tactile affichée au joueur ou modifier l'état utilisé par une disposition actuellement affichée. Les deux méthodes peuvent être combinées pour offrir l'expérience la plus naturelle possible aux joueurs.

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

Le changement de disposition doit être utilisé dans les cas suivants :

* Transition entre différents schémas de contrôle (p. ex., 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, permettre une expérience cinématique, etc.)

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

La modification de l'état du jeu inclus dans la partie contexte de l'ensemble d'adaptation tactile doit être utilisée dans les cas suivants :

* Modifier les images ou l'iconographie des contrôles en fonction de l'état de jeu actuel du joueur. Voici quelques exemples :
  * Changer l'image du bouton de tir selon l'arme sélectionnée par le joueur.
  * Changer les images des capacités selon les objets que le joueur a actuellement dans son inventaire.
* Modifier l'état visuel (visibilité et activation) des contrôles en fonction de l'état de jeu actuel 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" />

## Changer de disposition pendant l'exécution

**Afficher une disposition précise**
Le jeu doit utiliser l'API [`XGameStreamingShowTouchControlLayout`](/fr-CA/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrollayout) pour afficher une nouvelle disposition.

**Masquer la disposition actuelle**
Le jeu doit utiliser l'API [`XGameStreamingHideTouchControls`](/fr-CA/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" />

## Changer l'état pendant l'exécution

L'état initial au lancement du jeu est défini par l'[état par défaut](/fr-CA/build/core-features/common/game-streaming/game-streaming-touch-touch-adaptation-bundle#context) inclus dans l'ensemble d'adaptation tactile (Touch Adaptation Bundle). 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 pendant 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 » 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 suivants 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

- [Cas de test les plus souvent en échec](/fr-CA/publishing/certification/xr-top-failing.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 du titre](/fr/publishing/certification/fma/xr-052.md)
- [XR-052 État utilisateur et emplacement des sauvegardes de titre, itinérance et dépendances](/fr/publishing/certification/xr/xr-052.md)
- [Exigences XBOX testées lors de la certification pour les jeux sur console XBOX](/fr/publishing/certification/console-cert-tested-requirements.md)
