如何在不使用UWP的情况下使用命名空间Windows.gaming.gaming.input

How to use the namespace Windows.Gaming.Input in C++ without using UWP?

本文关键字:gaming 命名空间 Windows input 情况下 UWP      更新时间:2023-10-16

我有一个大型的C 游戏项目,我想在其中添加对Xbox One控制器的支持。我尝试使用windows.gaming.input名称空间。但是,看来这仅适用于UWP项目。这是真的吗?

如果是这种情况,将现有的SDL引擎移植到UWP是否很容易?

您可以从桌面应用程序中调用Windows.gaming.gaming.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;
}