次の方法で共有


XGameStreamingUpdateTouchControlsState

タッチ レイアウトがその動作を変更するために使用できるすべてのストリーミング クライアントで状態を更新します。 現在表示されているタッチ コントロール セットの視覚的な変更は、すべての変数が更新された後に行われます。

構文

HRESULT XGameStreamingUpdateTouchControlsState(  
         size_t operationCount,  
         const XGameStreamingTouchControlsStateOperation* operations  
)  

パラメーター

operationCount _In_
型: size_t

渡される操作の配列のサイズ。

operations _In_reads_opt_(operationCount)
型: XGameStreamingTouchControlsStateOperation*

要求されているすべての状態変数の更新の配列。

戻り値

型: HRESULT

成功した場合は S_OK を返し、それ以外の場合はエラー コードを返します。

返される可能性のあるエラー

エラー コード エラー値 エラーの原因
E_GAMESTREAMING_NOT_INITIALIZED 0x89245400 XGameStreaming ランタイムが初期化されていません。 他の API を呼び出す前に XGameStreamingInitialize を呼び出してください。
E_INVALIDARG 0x80070057 指定された操作には、操作 XGameStreamingTouchControlsStateValueKind で指定されたデータ型と一致するデータがありません

解説

ストリーミング クライアントで使用されるタッチ レイアウトは、状態に依存する場合があります。状態の初期値はタッチ レイアウト バンドルに埋め込まれます。 ゲームは状態を更新できますが、状態が更新されると、現在プレイヤーに表示されているレイアウトが変更される場合があります。

ゲームは、XGameStreamingUpdateTouchControlsState を使用して、接続されているすべてのクライアントの状態を変更することも、XGameStreamingUpdateTouchControlsStateOnClient を使用して、接続されている特定のクライアントを更新することもできます。

ゲームで状態の更新とレイアウトの変更を同時に実行する必要がある場合は、ゲームは XGameStreamingShowTouchControlsWithStateUpdate または XGameStreamingShowTouchControlsWithStateUpdateOnClient を使用できます。

// In this example, after the player has switched their active weapon - update the image of the fire
// button to match the current weapon and set 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.  
//
// Assumes a game speciic GetImageName function which returns a constant string for the specified weapoon


void GameStreamingClientManager::UpdateStateAfterWeaponChange(const playerWeapon& playerWeapon)
{
    // create an update for the active weapon's image
    XGameStreamingTouchControlsStateOperation weaponImage;
    weaponImage.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    weaponImage.path = "/ActiveWeaponImage";
    weaponImage.value.valueKind = XGameStreamingTouchControlsStateValueKind::String;
    weaponImage.value.stringValue = GetImageName(playerWeapon.activeWeapon.id);

    // create an update for whether the reload button should be enabled
    XGameStreamingTouchControlsStateOperation reloadEnabled;
    reloadEnabled.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    reloadEnabled.path = "/ReloadEnabled";
    reloadEnabled.valueKind = XGameStreamingTouchControlsStateValueKind::Bool;
    reloadEnabled.booleanValue = playerWeapon.activeWeapon.reloadClips > 0;

    // combine all the updates into the update state call and make the call
    XGameStreamingTouchControlsStateOperation[2] updateOperations = {weaponImage, reloadEnabled};
    
    XGameStreamingUpdateTouchControlsState(updateOperations, _countof(updateOperations));
}
// In this example, after the player has gone to their inventory screen and had the ability to apply items
// to two active slots. Update the state for layouts to have layouts match the player's current
// loaded items from inventory (may or may not be the current layout being displayed).
// 
// Assumes passing in game structure that includes the player's active inventory


void GameStreamingClientManager::AfterInventoryScreen(const PlayerInventory& playerInventory)
{
    std::vector<XGameStreamingTouchControlsStateOperation> updateOperations;
    
    // check the first inventory slots, if empty hide that button from the layout
    // if item is placed in that slot, update the image to match the inventory items
    
    XGameStreamingTouchControlsStateOperation slot1Visible;
    slot1Visible.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    slot1Visible.path = "/Slot1IsVisible";
    slot1Visible.valueKind = XGameStreamingTouchControlsStateValueKind::Boolean;
    slot1Visible.boolValue =  playerInventory.slot1 != nullptr;
    
    updateOperations.push_back(slot1Visible);

    if (playerInventory.slot1 != nullptr) 
    {
        // create an update for the active weapon's image
        XGameStreamingTouchControlsStateOperation slot1Image;
        slot1Image.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
        slot1Image.path = "/Slot1Image";
        slot1Image.value.valueKind = XGameStreamingTouchControlsStateValueKind::String;
        slot1Image.value.stringValue = GetImageName(playerInventory.slot1.id);        
        updateOperations.pushBack(slot1Image);
    }
    

    // ... 
    // do the same for the second inventory spot
    // ...

    // Update the state so that layouts will be updated correctly
    XGameStreamingUpdateTouchControlsState(updateOperations.data(), updateOperations.size());
}

要件

ヘッダー: XGameStreaming.h

ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体

関連項目

XGameStreaming
XGameStreamingTouchControlsStateOperationKind
XGameStreamingTouchControlsStateOperation
XGameStreamingTouchControlsStateValue
XGameStreamingShowTouchControlsWithStateUpdate
XGameStreamingShowTouchControlsWithStateUpdateOnClient
XGameStreamingUpdateTouchControlsStateOnClient