Windows.Xbox.Input에서 GameInput으로 포팅

Windows.Xbox.Input은(는) GDK 이전 Xbox One 소프트웨어 개발 키트 개발을 위한 입력 API입니다. 개념 상으로, GameInput은(는) 장치와 입력 값을 다양한 방법으로 관찰합니다. 이 항목은 Windows.Xbox.Input(와)과 GameInput 사이의 몇 가지 중요한 차이점을 설명합니다.

입력 중심 대비 장치 중심

Windows.Xbox.InputGameInput 사이의 주요 차이점은 전자는 직접 장치와 장치의 속성으로 입력 상태를 수집하여 시작해야 한다는 점입니다. 이와 대조적으로 GameInput은 연결된 장치가 있는 필터링 가능한 입력 읽기 스트림으로 시작합니다.

A 버튼 누르기 찾기

게임이 처음 시작되면 A를 눌러서 계속할 준비가 되었다는 것을 표시해야 합니다. 여기에서, 예제는 Windows.Xbox.InputGameInput(으)로 이 과정을 비교합니다. 이 예제는 게임 패드에서만 찾습니다. 본 사례는 설명을 위해 간소화한 점에 유의합니다.

Windows.Xbox.Input

다음의 코드 사례는 시스템에 연결된 모든 게임 패드를 열거하고 gamepads 벡터에 저장하는 것으로 시작됩니다. 그 후 루프로 gamepads에서 반복하고, 각각의 현재 입력 값을 살펴보고, A의 각 값을 점검합니다.

참고 항목

이 코드는 이전의 API를 참조합니다. 이러한 호출은 GameInput에 존재하지 않습니다.

void PollGamepadInput()
{
    // Find all gamepads.
    IVectorView<IGamepad^>^ gamepads = Gamepad::GetGamepads();

    // Cycle through each gamepad.
    for ( unsigned int i = 0; i < gamepads->Size; ++i )
    {
        // Get the gamepad's current reading.
        IGamepadReading^ reading = gamepads->GetAt(i)->GetCurrentReading();

        if ( reading->IsAPressed )
        {
            // Logic for the A button being pressed.
        }
    }
}

이 모델은 개선할 수 있습니다. 게임은 시스템에 연결된 다양한 장치의 사본을 저장해야 합니다. 여러분은 각 장치의 세부 정보를 이해해야 합니다. 또한, 모든 게임 패드의 로컬 사본을 저장함으로써 코드는 가장 최근에 읽은 값을 얻기보다는 시간 내에 상태를 캡처합니다.

GameInput

다음의 사례에서 코드는 어떤 장치에서나 가장 최근의 게임 패드 입력을 찾습니다. GameInputKind 필터가 GamePad로 설정된 GetCurrentReading을 호출합니다. 코드는 m_gameInput을 요청하여 게임 패드 판독값만 반환합니다. 그런 다음 코드는 읽기 상태를 쿼리하고 A 버튼 누르기를 확인합니다.

어떤 게임 패드를 확인하는지 계속 추적해야 할 수 있습니다. 더 완전한 예제는 GameInput 읽기를 참조하세요.

IGameInput* g_gameInput = nullptr;

HRESULT InitializeInput()
{
    return GameInputCreate(&g_gameInput);
}

void PollGamepadInput()
{
    ComPtr<IGameInputReading> reading;

    // Get the most current gamepad reading, not filtering by a specific device.
    // An error from the GetReading method indicates that no gamepad readings
    // were found.
    if (SUCCEEDED(g_gameInput->GetCurrentReading(GameInputKindGamepad, nullptr, &reading)))
    {
        // Read the gamepad state.
        GameInputGamepadState state;
        reading->GetGamepadState(&state);

        if (state.buttons & GameInputGamepadA)
        {
            // Logic for the A button being pressed.
        }
    }
}

참고 항목

GameInput에서는 장치를 통해 반복하고 각 판독치를 확인할 필요가 없습니다. 그 대신, 한 번의 메서드 호출로 최신 입력 상태를 확인할 수 있습니다. 각 물리 장치에 대해 얼마나 많이 또는 적게 파악할지 선택할 수 있습니다.

참고 항목

GameInput 개요

입력 API 참조

Microsoft 게임 개발 키트