从 Windows.Xbox.Input 移植到 GameInput

Windows.Xbox.Input 是预 GDK Xbox One 软件开发工具包开发的输入 API。 在概念上,GameInput 以不同方式查看设备和输入读取。 本主题介绍了 Windows.Xbox.InputGameInput 之间的一些关键差异。

以输入为中心对比以设备为中心

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 筛选器设置为 GamePadGetCurrentReading,代码会要求 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 游戏开发工具包