XGameStreamingUpdateTouchControlsStateOnClient
タッチ レイアウトがその動作を変更するために使用できる指定したストリーミング クライアントで状態を更新します。 現在表示されているタッチ コントロール セットの視覚的な変更は、すべての変数が更新された後に行われます。
構文
HRESULT XGameStreamingUpdateTouchControlsStateOnClient(
XGameStreamingClientId client,
size_t operationCount,
const XGameStreamingTouchControlsStateOperation* operations
)
パラメーター
client _In_
型: XGameStreamingClientId
状態を更新するストリーミング クライアント デバイス。
operationCount _In_
型: size_t
渡されている操作の配列のサイズ
operations _In_reads_opt_(operationCount)
型: XGameStreamingTouchControlsStateOperation*
要求されているすべての状態変数の更新の配列。
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合はエラー コードを返します。
返される可能性のあるエラー
エラー コード | エラー値 | エラーの原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming ランタイムが初期化されていません。 他の API を呼び出す前に XGameStreamingInitialize を呼び出してください。 |
E_GAMESTREAMING_CLIENT_NOT_CONNECTED | 0x89245401 | 指定されたクライアントが接続されていません。 |
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 and
// a clientId for the client to update
//
// Assumes a game speciic GetImageName function which returns a constant string for the specified weapoon
void GameStreamingClientManager::UpdateStateAfterWeaponChange(const playerWeapon& playerWeapon, XGameStreamingClientId clientId)
{
// 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};
XGameStreamingUpdateTouchControlsStateOnClient(clientId, _countof(updateOperations), 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 as well as the clientId to update
void GameStreamingClientManager::AfterInventoryScreen(const PlayerInventory& playerInventory, XGameStreamingClientId clientId)
{
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
XGameStreamingUpdateTouchControlsStateOnClient(clientId, updateOperations.size(), updateOperations.data());
}
要件
ヘッダー: XGameStreaming.h
ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体
関連項目
XGameStreaming
XGameStreamingTouchControlsStateOperationKind
XGameStreamingTouchControlsStateOperation
XGameStreamingTouchControlsStateValue
XGameStreamingShowTouchControlsWithStateUpdate
XGameStreamingUpdateTouchControlsState
XGameStreamingUpdateTouchControlsStateOnClient