JoyStick(游戏手柄)与C#

前言

这是我的第一篇技术博客,希望能为大家提供些有用信息。

 

概述

       前段时间有一项工作是通过游戏手柄控制云台,通过google和msdn搞定了,在这吧就总结一下吧。

问题

        对于手柄控制主要有以下几个问题

  1. 在合适的时机获取游戏手柄的输入?
  2. 一般游戏手柄都是有n个方向键和n个功能键控制的,要确认各个键的状态?

解决方案

  1. 通过windows API 中与游戏手柄相关的函数进行控制,主要是joystick系统函数,这一问题的关键点是P/Invoke调用。优点是不需要directx 支持,缺点是调用如果要想让多个窗口接受手柄输入有点麻烦(后边会详细描述)。
  2. 通过directx的directx input,Microsoft.DirectX.DirectInput命名空间下的类对joystick进行了很好的封装,在.net中用时很方便。优点使用方便,缺点需要directx支持不过这点应该不用担心,现在大部分系统安装完后应该都安装了directx

在本篇中将先介绍通过directxinput进行控制,这篇文章有些地方借鉴了codepoject上的文章点击这里可以看到

程序最终运行效果

运行效果

1.获取系统中已经连接成功的游戏手柄列表,代码如下

        public static string[] FindJoysticks(IntPtr hWnd)

        {

            string[] systemJoysticks = null;



            try

            {

                // 查找连接成功的游戏设备

                DeviceList gameControllerList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);



                // 遍历列表并获取设备名称

                if (gameControllerList.Count > 0)

                {

                    systemJoysticks = new string[gameControllerList.Count];

                    int i
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值