XGameStreamingShowTouchControlsWithStateUpdate
接続されているすべてのストリーミング クライアント デバイスがタッチ コントロールの状態を更新し、指定したタッチ レイアウトを表示することを要求します。 状態の更新はすべて、新しいタッチ レイアウトが表示される前に行われます。
構文
HRESULT XGameStreamingShowTouchControlsWithStateUpdate(
const char* layout,
size_t operationCount,
const XGameStreamingTouchControlsStateOperation* operations
)
パラメーター
layout _In_opt_z_
型: char*
表示するタッチ コントロール レイアウトの名前、または標準レイアウトを表示する nullptr
。
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 で指定されたデータ型と一致するデータがありません |
解説
この API は、ゲームで特定のタッチ レイアウトを表示させ、レンダリングに影響を与える可能性のある何らかの状態の更新もこのレイアウトで要求する場合に使用する必要があります。 この API は、新しいタッチ レイアウトで参照される変数の状態の更新と、接続されているすべてのストリーミング クライアント デバイスでのタッチ レイアウトの切り替えの両方を行う場合に使用します。 この API によって、すべての状態の更新は、必ず新しいレイアウトが表示される前に行われるようになります。
特定のクライアントのみに影響を与える場合は、XGameStreamingShowTouchControlsWithStateUpdateOnClient を使用します。
ゲームでレイアウトのみを変更する場合は、ゲームでは代わりに XGameStreamingShowTouchControlLayout を使用する必要があります。
状態の更新が現在のレイアウトまたはその他のレイアウトに影響する可能性があり、特定のタッチ レイアウトの変更にかかわらず更新を行う必要がある場合は、ゲームでは代わりに XGameStreamingUpdateTouchControlsState を使用する必要があります。
例
// In this example, the player has just selected a specific building in an strategy game
// and the game wants to populate the two building specific action slots with the appropriate imagery
// before selecting the layouts
//
// Assumes passing in game structure that refers to the selected building and a game function to get the image
// assets for a particular building capability.
void GameStreamingClientManager::UpdateBuildingStateAndControls(const BuildingProperties& building)
{
std::vector<XGameStreamingTouchControlsStateOperation> updateOperations;
// update the image for the first two building slots
XGameStreamingTouchControlsStateOperation buildingCapability1Image;
buildingCapability1Image.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
buildingCapability1Image.path = "/buildingCapability1Image";
buildingCapability1Image.valueKind = XGameStreamingTouchControlsStateValueKind::String;
buildingCapability1Image.stringValue = GetImageName(building.capability[0].id);
updateOperations.push_back(buildingCapability1Image);
XGameStreamingTouchControlsStateOperation buildingCapability2Image;
buildingCapability2Image.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
buildingCapability2Image.path = "/buildingCapability2Image";
buildingCapability2Image.valueKind = XGameStreamingTouchControlsStateValueKind::String;
buildingCapability2Image.stringValue = GetImageName(building.capability[1].id);
updateOperations.push_back(buildingCapability2Image);
// enable the second slot if the building is of level 3 or above, otherwise the third slot will be disabled
XGameStreamingTouchControlsStateOperation buildingCapability2Enabled;
buildingCapability2Enabled.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
buildingCapability2Enabled.path = "/buildingCapability2IsEnabled";
buildingCapability2Enabled.valueKind = XGameStreamingTouchControlsStateValueKind::Boolean;
buildingCapability2Enabled.booleanValue = building.level >= 3;
updateOperations.push_back(buildingCapability2Enabled);
// Switch to the building layout with the state update being sent as well
XGameStreamingShowTouchControlsWithStateUpdate("building", updateOperations.size(), updateOperations.data());
}
要件
ヘッダー: XGameStreaming.h
ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体
関連項目
XGameStreaming
XGameStreamingTouchControlsStateOperationKind
XGameStreamingTouchControlsStateOperation
XGameStreamingTouchControlsStateValue
XGameStreamingShowTouchControlsWithStateUpdateOnClient
XGameStreamingUpdateTouchControlsState
XGameStreamingUpdateTouchControlsStateOnClient