2016-12-22 1 views
0

Xbox One 컨트롤러에 대한 지원을 추가하고자하는 대형 C++ 게임 프로젝트가 있습니다. Windows.Gaming.Input namespace을 사용해 보았습니다. 그러나 이것은 UWP 프로젝트에서만 사용할 수있는 것으로 보인다. 사실입니까?UWP를 사용하지 않고 C++에서 네임 스페이스 Windows.Gaming.Input을 사용하는 방법은 무엇입니까?

이 경우 기존 SDL 엔진을 UWP로 이식하는 것이 쉬울까요?

+0

당신이 ['XInput'] (HTTPS로 직접 이동 제안이 I에 대한 UWP API를 사용하는 중요한 필요가 없다면 : // MSDN을. 대신 microsoft.com/en-us/library/windows/desktop/hh405053(v=vs.85).aspx)를 참조하십시오. – Mgetz

답변

2

데스크톱 응용 프로그램에서 Windows.Gaming.Input을 호출해도 괜찮습니다. UWP 응용 프로그램에서만 사용할 수 있다는 생각이 들지는 않습니다. 헤더를 포함하고 사용하십시오. 여기에 모든 게임 패드 버튼 상태를 인쇄하기위한 샘플 코드는 다음과 같습니다

#include <assert.h> 
#include <cstdint> 
#include <iostream> 
#include <roapi.h> 
#include <wrl.h> 
#include "windows.gaming.input.h" 

using namespace ABI::Windows::Foundation::Collections; 
using namespace ABI::Windows::Gaming::Input; 
using namespace Microsoft::WRL; 
using namespace Microsoft::WRL::Wrappers; 

#pragma comment(lib, "runtimeobject.lib") 

int main() 
{ 
    auto hr = RoInitialize(RO_INIT_MULTITHREADED); 
    assert(SUCCEEDED(hr)); 

    ComPtr<IGamepadStatics> gamepadStatics; 
    hr = RoGetActivationFactory(HStringReference(L"Windows.Gaming.Input.Gamepad").Get(), __uuidof(IGamepadStatics), &gamepadStatics); 
    assert(SUCCEEDED(hr)); 

    ComPtr<IVectorView<Gamepad*>> gamepads; 
    hr = gamepadStatics->get_Gamepads(&gamepads); 
    assert(SUCCEEDED(hr)); 

    uint32_t gamepadCount; 
    hr = gamepads->get_Size(&gamepadCount); 
    assert(SUCCEEDED(hr)); 

    for (uint32_t i = 0; i < gamepadCount; i++) 
    { 
     ComPtr<IGamepad> gamepad; 
     hr = gamepads->GetAt(i, &gamepad); 
     assert(SUCCEEDED(hr)); 

     GamepadReading gamepadReading; 
     hr = gamepad->GetCurrentReading(&gamepadReading); 
     assert(SUCCEEDED(hr)); 

     std::cout << "Gamepad " << i + 1 << " buttons value is: " << gamepadReading.Buttons << std::endl; 
    } 

    return 0; 
} 
관련 문제