Welcome

首页 / 软件开发 / C# / C#对游戏手柄的编程开发-API篇(1)

C#对游戏手柄的编程开发-API篇(1)2011-08-16 博客园 Kingthy前段时间花38元从网上买了一对北通的USB游戏手柄,这样周末与晚上的休闲时间就可以玩玩孩儿时的 SFC与街机模拟游戏了。

某日在某个网站上玩一个Flash游戏时,突然想到,如果也能使用手柄来玩Flash游戏,那该多爽 。 但可惜的是,目前的Flash都是不支持对游戏手柄进行编程,这不免是Flash中的一个遗憾。。

虽然Flash中不支持对游戏手柄进行编程,但我们可以换种方法,做一个辅助程序(外挂? ) ,将手柄中的操作事件转换为Flash中可接受的键盘与鼠标操作事件,这样不就可以使用游戏手柄来玩 Flash游戏了吗?!于是,上网查了相关资料,但却发现只有C++方面的案例,而C#一个也找不,这不打紧 ,自己动手,丰衣足食

(注:类似这样的功能,网络已有现成的软件,是一个日本人开发的,叫JoyToKey)

对游戏手柄进行操作,大概有两种方式:采用系统API或者使用DirectInput操作游戏手柄设备。(也 许还有其它方式,但我的知识范围有限,其它方式就不得而知了)

采用系统API是一种最简单的方式,因为系统已帮我们封装好了所有细节,我们只要在程序中定时取得 游戏手柄设备的状态就可以了(轮循)。

操作游戏手柄(杆)的API有以下几个:

函数名称函数说明
joyGetNumDevs获取当前系统支持的游戏设备数量
joyGetDevCaps查询获取指定的游戏杆设备以确定其性能
joySetCapture向系统申请捕获某个游戏设备并定时将该设备的状态值通过消息发送到某 个窗口
joyReleaseCapture释放对某个游戏设备的捕获
joyGetPos获取游戏设备的坐标位置和按钮状态
joyGetPosEx获取游戏设备的坐标位置和按钮状态
joyGetThreshold查询指定的游戏杆设备的当前移动阈值
joySetThreshold设置指定的游戏杆设备的移动阈值

其中,根据调用不同的方法又可分为两种方式。

1)被动方式:

调用joySetCapture方法,向系统申请对某个游戏手柄的捕捉,如果成功申请,系统将会定时将此游戏 手柄的状态信息通过消息方式通知到我们的某个窗口上。