XGameStreamingShowTouchControlsWithStateUpdateOnClient

지정된 스트리밍 클라이언트 장치의 터치 제어 상태를 업데이트한 다음 지정된 터치 레이아웃을 표시하도록 요청합니다. 모든 상태 업데이트는 새 터치 레이아웃이 표시되기 전에 수행됩니다.

구문

HRESULT XGameStreamingShowTouchControlsWithStateUpdateOnClient(  
         XGameStreamingClientId client,  
         const char* layout,  
         size_t operationCount,  
         const XGameStreamingTouchControlsStateOperation* operations  
)  

매개 변수

client _In_
형식: XGameStreamingClientId

상태를 업데이트하고 터치 컨트롤을 표시할 스트리밍 클라이언트 장치입니다.

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_GAMESTREAMING_CLIENT_NOT_CONNECTED 0x89245401 지정된 클라이언트가 연결되어 있지 않습니다.
E_INVALIDARG 0x80070057 지정된 작업에 XGameStreamingTouchControlsStateValueKind 작업에 지정된 데이터 유형과 일치하는 데이터가 없습니다.

비고

게임에서 특정 터치 레이아웃을 보여주려고 할 때 이 API를 사용해야 하며, 이 경우 렌더링에 영향을 미칠 수 있는 상태 업데이트가 필요합니다. 새 터치 레이아웃에서 참조되는 변수의 상태를 업데이트하고 지정된 스트리밍 클라이언트 장치의 터치 레이아웃으로 전환하려면 이 API를 사용합니다. 이 API를 사용하면 새 레이아웃이 표시되기 전에 모든 상태 업데이트가 수행됩니다.

모든 스트리밍 클라이언트 장치에 영향을 미치려면 XGameStreamingShowTouchControlsWithStateUpdate를 사용하세요.

게임에서 레이아웃만 변경하려는 경우 게임은 XGameStreamingShowTouchControlLayoutOnClient를 대신 사용해야 합니다.

상태 업데이트가 현재 레이아웃이나 다른 레이아웃에 영향을 미칠 수 있고 특정 터치 레이아웃 변경에 관계없이 업데이트가 발생해야 하는 경우 게임에서 XGameStreamingUpdateTouchControlsStateOnClient를 대신 사용해야 합니다.

// 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 and the client to be updated


void GameStreamingClientManager::UpdateBuildingStateAndControls(const BuildingProperties& building, XGameStreamingClientId clientId)
{
    
    

    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
    XGameStreamingShowTouchControlsWithStateUpdateOnClient(clientId, "building", updateOperations.size(), updateOperations.data());
}

요건

헤더: XGameStreaming.h

라이브러리: xgameruntime.lib 지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔

참고 항목

XGameStreaming
XGameStreamingTouchControlsStateOperationKind
XGameStreamingTouchControlsStateOperation
XGameStreamingTouchControlsStateValue
XGameStreamingShowTouchControlsWithStateUpdate
XGameStreamingUpdateTouchControlsState
XGameStreamingUpdateTouchControlsStateOnClient