如何检测UWP应用程序中的游戏控制器按钮按下(ABXY)

时间:2017-01-23 17:04:35

标签: c# uwp xbox-one

我开发了一款可能在XBOX上运行的UWP应用程序。

我想检测是否按下了游戏手柄控制器上的按钮(A B X或Y)。

我想我需要使用点击事件?如果它在点击事件上,我需要检查点击事件?

查看此帖子,确定是否已按下触发器..

Controller support for Xbox one in Windows UWP

/*
 * Note: I have not tested this code.
 * If it is incorrect, please do edit with the fix.
 */
using Windows.Gaming.Input;

// bla bla bla boring stuff...

// Get the first controller
var controller = Gamepad.Gamepads.First();

// Get the current state
var reading = controller.GetCurrentReading();

// Check to see if the left trigger was depressed about half way down
if (reading.LeftTrigger == 0.5;)
{
    // Do whatever
}

我认为有一种等效的方法可以检查是否有一个ABXY按钮被按下了?我下次有机会时会检查。

另一方面,这篇博客文章对于开始为Xbox One开发UWP的人来说非常有用http://grogansoft.com/blog/?p=1278

更新 看起来我可以调用GetCurrentReading()来获得GamepadReading结构。从那里得到GamepadButtons的状态。

1 个答案:

答案 0 :(得分:4)

即使用户点击游戏手柄按钮,也会触发来自KeyDown或任何其他UWP控件的CoreWindow事件。您可以在VirtualKey枚举中找到GamepadAGamepadB等值,因此检查其按下的基本方法可能如下所示:

private void CoreWindow_KeyDown(CoreWindow sender, KeyEventArgs args)
{
    if (args.Handled)
    {
        return;
    }

    switch (args.VirtualKey)
    {
        case VirtualKey.GamepadA:
            // Gamepad A button was pressed
            break;

        case VirtualKey.GamepadB:
            // Gamepad B button was pressed
            break;

        case VirtualKey.GamepadX:
            // Gamepad X button was pressed
            break;

        case VirtualKey.GamepadY:
            // Gamepad Y button was pressed
            break;
    }
}

您必须订阅该事件(例如在构造函数中):

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;