您的当前位置:首页正文

用C#对手柄输入的监听

2024-11-28 来源:个人技术集锦

用C#对手柄输入的监听

在现代游戏开发和其他交互式应用程序中,游戏手柄的使用越来越普遍。特别是Xbox控制器,因其普及度和兼容性,成为了许多开发者的首选。本文将介绍如何使用C#和XInput API来监控Xbox控制器的摇杆输入,并在窗口中显示这些输入信息。

安装必要的库

为了在C#中使用XInput API,我们需要借助SharpDX库,这是一个用于在C#中使用DirectX API的开源库。首先,我们需要通过NuGet包管理器来安装它。

Install-Package SharpDX 
Install-Package SharpDX.XInput

 

示例代码

安装完必要的库之后,我们可以开始编写代码了。以下是一个简单的示例程序,用于监控Xbox控制器的摇杆输入并在控制台窗口中显示。

using System;
using SharpDX.XInput;
using System.Threading;

namespace XboxControllerMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的XInput控制器实例
            Controller controller = new Controller(UserIndex.One);
            if (!controller.IsConnected)
            {
                Console.WriteLine("Xbox控制器未连接。");
                return;
            }

            Console.WriteLine("Xbox控制器已连接。");

            while (true)
            {
                // 获取控制器的状态
                State state = controller.GetState();

                // 获取左摇杆和右摇杆的值
                Gamepad gamepad = state.Gamepad;
                int leftThumbX = gamepad.LeftThumbX;
                int leftThumbY = gamepad.LeftThumbY;
                int rightThumbX = gamepad.RightThumbX;
                int rightThumbY = gamepad.RightThumbY;

                // 清除控制台
                Console.Clear();

                // 显示摇杆值
                Console.WriteLine("左摇杆:  X: {0}  Y: {1}", leftThumbX, leftThumbY);
                Console.WriteLine("右摇杆: X: {0}  Y: {1}", rightThumbX, rightThumbY);

                // 线程休眠,防止控制台输出过快
                Thread.Sleep(100);
            }
        }
    }
}

解释代码

  1. 创建Controller实例: 使用SharpDX.XInput命名空间中的Controller类创建一个新实例。UserIndex.One表示第一个控制器。

    Controller controller = new Controller(UserIndex.One);
    

  2. 检查连接状态: 使用IsConnected属性检查控制器是否连接。如果未连接,则输出提示并退出程序。

    if (!controller.IsConnected)
    {
        Console.WriteLine("Xbox控制器未连接。");
        return;
    }
    
    Console.WriteLine("Xbox控制器已连接。");
    

  3. 获取控制器状态: 在一个无限循环中,使用GetState方法获取控制器的当前状态。

    while (true)
    {
        State state = controller.GetState();
    }
    

  4. 读取摇杆值: 从State对象中获取Gamepad结构体,并读取左摇杆(LeftThumbXLeftThumbY)和右摇杆(RightThumbXRightThumbY)的值。值类型是short,如果摇杆拉满,就是short值的上限。

    Gamepad gamepad = state.Gamepad;
    int leftThumbX = gamepad.LeftThumbX;
    int leftThumbY = gamepad.LeftThumbY;
    int rightThumbX = gamepad.RightThumbX;
    int rightThumbY = gamepad.RightThumbY;
    

  5. 输出到控制台: 清除控制台并输出当前的摇杆值。

    Console.Clear();
    Console.WriteLine("左摇杆:  X: {0}  Y: {1}", leftThumbX, leftThumbY);
    Console.WriteLine("右摇杆: X: {0}  Y: {1}", rightThumbX, rightThumbY);
    
  6. 线程睡眠: 使用Thread.Sleep(100)让线程休眠100毫秒,以防止控制台输出过快。

    Thread.Sleep(100);
    

运行程序

  1. 连接Xbox控制器到电脑。
  2. 运行程序。
  3. 移动控制器上的摇杆,您会看到控制台窗口中输出的摇杆值随之变化。

希望本文能帮助您更好地理解如何在C#中使用XInput API监控Xbox控制器的输入。如果您有任何问题或建议,请随时留言讨论。

显示全文