Как использовать пространство имен Windows.Gaming.Input в C ++ без использования UWP?

У меня большой игровой проект на C ++, в который я хочу добавить поддержку контроллеров Xbox One. Я пытался использовать Пространство имен Windows.Gaming.Input. Однако, похоже, что это доступно только для проектов UWP. Это правда?

Если это так, будет ли легко перенести существующий механизм SDL в UWP?

0

Решение

Вы можете просто позвонить в 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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]