首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用UWP的情况下使用C++中的命名空间Windows.Gaming.Input?

如何在不使用UWP的情况下使用C++中的命名空间Windows.Gaming.Input?
EN

Stack Overflow用户
提问于 2016-12-22 23:26:29
回答 1查看 3K关注 0票数 0

我有一个很大的C++游戏项目,我想在其中添加对Xbox One控制器的支持。我试过使用Windows.Gaming.Input namespace。然而,这似乎只适用于UWP项目。这是真的吗?

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

EN

回答 1

Stack Overflow用户

发布于 2016-12-23 14:50:50

你可以很好地从桌面应用程序调用Windows.Gaming.Input -不确定你是从哪里得到这个想法的,它只适用于UWP应用程序。只需包含头部并使用它即可。下面是在所有游戏面板上打印按钮状态的示例代码:

代码语言:javascript
复制
#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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41286503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档