游戏手柄编程
游戏机手柄上盖的数控加工编程与仿真

有着 强大 的 实体建 模 、 曲面建模 、 虚拟装 配 、 工程 绘 图和 制造 加工 等 功能 。 c I MC 0E d i t 是 一 套 可 以 对 数 控 程 序 进 行 数 据 编 辑、 数 据处 理 、 文 件 比较 与三维 刀 具 轨迹 模 拟 、 D NC传 输 的应用 软 件 。该 软件 以其 强大 的功 能 、 低 廉 的价 格 而风 靡 欧美 。利 用 C I MC OE d i t 软 件 的数 据 处 理 功 能 可 以方便 地实 现 对各 轴 数 据 的运 算 , 迅 速 完 成 程 序 平 移、 旋转 、 镜像 以及 主轴 转 速 、 切 削进 给 的动 态 调 整 等 数 控 程序 。其 具 有加 工 范 围显 示 功 能 , 可 自动 计 算 出 程 序 最大 值与 最小 值 的范 围 , 有效 地避 免机 床超 程 、 转 速 进 给超 限 等 。 2 游戏 机手 柄上 盖建 模 游戏 机手 柄 上盖 是 一 个 比较 复 杂 的 零 件 , 在 设 计 过 程 中需 要大 量 的 曲面 造 型 , 而 UG 软 件 具 有 强 大 的 曲面 造型 能力 , 因此我 们 利 用 UG 软 件 的实 体 建模 模 块 进 行游 戏机 手 柄上盖 的设 汁 。对 产 品零 件进 行结 构 和工艺分 析 , 得 到该 零件 的设计效果 图 ] , 如 图 1所示 。 3 游戏 机手 柄上 盖 的数 控加 工
第 4期 ( 总第 1 8 5 期) 2 0 1 4年 O 8月
机 械 工 程 与 自 动 化
M ECHANI CAL ENGI NEE RI NG & AUTOMAT1 0N
NO . 4
Au g.
文章编 号 : 1 6 7 2 — 6 4 1 3 ( 2 0 1பைடு நூலகம்4 ) 0 4 - 0 1 8 3 — 0 2
自定义模块手柄操作方法

自定义模块手柄操作方法手柄是一种用来操作游戏的输入设备,它可以提供更加真实和直观的游戏体验。
为了实现手柄操作功能,我们可以借助自定义模块来收集手柄的输入数据,并通过代码来处理这些数据以实现游戏操作。
首先,我们需要使用一些基本的硬件组件来构建手柄。
这包括按钮、摇杆和传感器等。
这些组件可以连接到控制器板,然后将控制器板连接到计算机或游戏主机上。
在编写代码之前,我们要确保手柄的硬件连接正确,并能够与计算机或游戏主机进行通信。
接下来,我们可以创建一个自定义模块来处理手柄的输入数据。
该模块可以包含一些函数,用于处理不同类型的手柄输入,例如按钮按下、按钮释放、摇杆移动等。
下面是一个简单的示例代码:Pythonimport time# 按钮事件处理函数def button_event(button_id, state):if state == 'pressed':print(f'按钮{button_id}被按下了')# 在这里处理按钮按下后的逻辑elif state == 'released':print(f'按钮{button_id}被释放了')# 在这里处理按钮释放后的逻辑# 摇杆事件处理函数def joystick_event(x, y):print(f'摇杆的位置为x={x},y={y}')# 在这里处理摇杆移动后的逻辑# 传感器事件处理函数def sensor_event(sensor_id, value):print(f'传感器{sensor_id}的值为{value}')# 在这里处理传感器的值变化后的逻辑# 启动手柄监听def start():while True:# 读取手柄的输入数据# 这里的代码需要根据实际情况进行修改button_id, state = read_button_data()x, y = read_joystick_data()sensor_id, value = read_sensor_data()# 根据输入数据调用相应的处理函数if button_id is not None:button_event(button_id, state)if x is not None and y is not None:joystick_event(x, y)if sensor_id is not None and value is not None: sensor_event(sensor_id, value)# 等待一段时间,避免过于频繁地读取输入数据time.sleep(0.1)# 读取按钮的输入数据def read_button_data():# 在这里实现读取按钮的输入数据的代码# 返回按钮的id和状态pass# 读取摇杆的输入数据def read_joystick_data():# 在这里实现读取摇杆的输入数据的代码# 返回摇杆的x和y坐标# 读取传感器的输入数据def read_sensor_data():# 在这里实现读取传感器的输入数据的代码# 返回传感器的id和值pass在上述代码中,我们定义了几个事件处理函数,分别对应手柄的按钮事件、摇杆事件和传感器事件。
nds编程手册

nds编程手册
学会手柄编程已经成为了今天高级玩家们不可或缺的技能。
NDS程序是通用手柄编程框架,支持手柄、游戏手柄和其他类
似设备的编程。
在这里,我们将详细介绍NDS编程手册,帮助
您搞定复杂的任务。
NDS程序涵盖了所有常见的单机,网络和多平台游戏手柄,根据不同的技术细节,面向不同的平台提供编程接口。
NDS程
序支持多种开发语言,包括C、C++、C#、Objective-C、JavaScript和Perl等,可以根据不同的平台实现个性化开发。
NDS手册从详细地描述设备结构和技术原理,到安装和配置、功能实现以及模拟器使用等涵盖了更广泛的领域。
此外,
手册还提供了大量编程实例,重点介绍了不同的开发环境下的
特殊编程技术。
将这些编程技术应用到实际开发中,能够大大
提高开发效率。
NDS编程手册是面向手柄开发者的综合性参考文档,能够
有效帮助开发者快速掌握手柄开发技术,丰富自身编程知识体系。
NDS编程手册充分发挥互联网手柄技术的巨大潜力,为手
柄开发和应用提供了强有力的技术支持。
游戏手柄

常用游戏手柄设置方法和注意事项以最流行DNF,拳王和合金弹头恐龙岛等街机游戏为例第一步:下个键盘映射工具说到手柄就不得不说一下常用的键盘映射工具,JOYTOKEY.这个工具非常好用.虽然我们可以在游戏里的按键设定里逐个设置手柄的按键.但是便宜的手柄不支持连发. 或者连发速度不够理想.好的又很贵.而且大部分手感舒服的手柄都带有震动功能.DNF没震动..有点浪费...所以还是建议用JOYTOKEY来玩游戏.>>>点击下载JOYTOKEY第二步:开始设置大家下好程序后,安装好就会出现这样的点击运行前,请注意要先把手柄插上.要不会报错.设置界面如下:进入这个界面后大家可以按职业新建立文档我主要玩鬼剑就只建立了1个三:关于设置以深圳市辰多星电子科技有限公司生产的cowboy手柄为列设置上下左右就不用说了这个大家都知道就是说只要把键盘上的按键填进去就可以映射成手柄相对的操作钮比如说键盘上的X攻击我要设置成按键3就只要先点按键3这一栏然后把键盘模拟设置下面那一框里填上X就可以了DNF的游戏操作键位是这样的大家可以自己对照去设置我的设置是方向设置不变1等于喝药2等于Z技能3等于X攻击4等于C后退至于手柄这5到10个键位我放了技能快截还有开地图等每个职业不一样大家按自己的喜好去设置就可以拉设置好后直接进游戏就可以享受用手柄杀怪了●、注意事项1,重要人体工程学资讯:长时间的重复动作、不适当的工作空间摆设、不正确的身体姿势或者不良的工作习惯,可能会导致身体不舒适并伤害到神经、肌腱及肌肉。
如果您的手掌、手腕、手臂、肩膀、脖子或背部感到疼痛、麻痹、刺痛、虚弱无力、肿胀、灼热、抽筋或僵硬,请让合格的医生对您进行检查。
2,建议使用产品时养成良好的习惯例如每小时休息十分钟,将产品拿在手腕、手肘及肩膀都最轻松的角度,并使前臂与地面保持水平。
3,请不要将产品拆开,不要将产品在潮湿、油烟多、灰尘多以及极端温度(强低温,强高温)下使用;禁止太阳暴晒、用非中性化学溶剂来清洁;避免液体浸入。
FIFA 09完美游戏手柄修改攻略

FIFA 09完美游戏手柄修改攻略打开FIFA文件夹,找到\data\input\devdat.dat,使用记事本打开.拉到最底下,在ENDOFFILE之前输入:(注:"Enter your gamepad name here"就是手柄在电脑里显示的名称,请按规格输入)手柄带有摇杆的,请输入:[Enter your gamepad name here|Enter your gamepad name here]DEADZONES=0.3,0.3,0.3,0.35|24|3,5|25|4,2|26|5,2|27|6,1|22|5,1|23|6,0|20|3,0|21|4,0|18|21,0|19|22,0|16|19,0|17|20,0|1|2,1|3|2,2|0|2,3|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|25|24|3,5|25|4,2|26|5,2|27|6,1|22|5,1|23|6,0|20|3,0|21|4,0|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|25|24|3,5|25|4,2|26|5,2|27|6,1|22|5,1|23|6,0|20|3,0|21|4,0|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|25|24|3,5|25|4,2|26|5,2|27|6,1|22|5,1|23|6,0|20|3,0|21|4,0|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|2说明:红色数字 "2" 和 "5" 分别代表右摇杆的 "上下" 和 "左右" ,出现右摇杆相反的问题把数字互换一下就正常了.手柄没摇杆的,请输入:[Enter your gamepad name here|Enter your gamepad name here]DEADZONES=0.3,0.3,0.3,0.30|18|21,0|19|22,0|16|19,0|17|20,0|1|2,1|3|2,2|0|2,3|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|20|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|20|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|20|18|21,0|19|22,0|16|19,0|17|20,1|1|2,3|3|2,0|0|2,2|2|2,4|10|2,5|13|2,6|11|2,7|14|2,10|9|2,11|8|2,8|12|2,9|15|2,1|4|2,3|5|2,0|6|2,4|7|2需要FIFA 08的键盘按法的,请找到[Keyboard|Keyboard],然后输入:[Keyboard|Keyboard]DEADZONES=0.0,0.0,0.0,0.028|0|2,63|3|2,1|1|2,16|10|2,18|13|2,44|11|2,46|14|2,203|16|2,205|17|2,200|18|2,208|19|2,75|16|2,77|17|2,72|18|2,80|19|2,57|8|2,59|9|2,15|15|2,62|12|2,64|15|2,60|2|2203|20|2,205|21|2,200|22|2,208|23|2,18|0|2,57|1|2,17|2|2,19|3|2,30|10|2,42|13|2,31|11|2,29|14|2,54|15|2,1|8|2,2|16|2,3|17|2,4|18|2,5|19|2,16|7|2,207|15|2,6|9|2,19|4|2,57|5|2,18|6|2,54|12|2 203|20|2,205|21|2,200|22|2,208|23|2,17|0|2,32|1|2,31|2|2,30|3|2,16|10|2,18|13|2,44|11|2,46|14|2,54|15|2,1|8|2,2|16|2,3|17|2,4|18|2,16|7|2,207|15|2,50|9|2,32|4|2,30|5|2,17|6|2,42|12|2203|20|2,205|21|2,200|22|2,208|23|2,18|0|2,57|1|2,17|2|2,19|3|2,30|10|2,42|13|2,31|11|2,29|14|2,54|15|2,1|8|2,2|16|2,3|17|2,4|18|2,5|19|2,16|7|2,207|15|2,6|9|2,19|4|2,57|5|2,18|6|2,54|12|2如需了解那些数字的含义,请参照键盘上的输入:Q,16W,17E,18R,19T,20Y,21U,22I,23O,24P,25A,30S,31D,32F,33G,34H,35J,36K,37L,38Z,44X,45C,46V,47B,48N,49M,50Left Shift,42Right Shift,54Space bar,57Left Ctrl,29Tab,15更多精彩攻略访问1。
游戏手柄下盖后模数控编程与加工仿真说明书

游戏手柄下盖后模数控编程与加工仿真说明书11、零件加工工艺分析(1)游戏手柄下盖后模大小:232mm×150mm×69mm。
(2)最大加工深度:26mm。
(3)最小的凹圆角半径:l.005mm。
(4)是否需要电火花加工:需要。
因为如图5-2所示中的3个位置用电脑锣加工是无法完全清除边上的余量。
5—2需要电火花加工(5)加工前是否需要补面:需要。
加IT前需要把4个破面补上,否则半精加工或精加工时没有加工孔表面上的余量。
(6)需要使用的加工方法:型腔镜铣开粗、型腔铣二次开粗等高轮廓钝半精加工等高轮廓镜精加工、固定轴区域轮廓钝半精加工、固定车山区域轮廓就精加工和固定轴清根。
22、毛坯和刀具的选用游戏手柄下盖模编程总的过程分为前的补面、开粗、二次开粗、半精加工、精加工和清角。
1. 编程前的补面(1)进入建模界面。
按Ctrl+M组合键进入建模界面。
(2)使用曲线通过组:进行补面。
在【曲面】工具条中单击【通过曲线组】:弹出【曲线组】对话框,接着选择如图5-4所示的“曲线l”并单击鼠标中键,然后选择“曲线2”并单击鼠标中键。
5-4使用曲线组功能补面(3)使用【通过曲线组1】功能进行补面。
参考步骤(2)继续补另一边的破面。
(4)进入模具设计界面选择【开始】【所有应用模块】【注塑模向导】工具,弹出注塑模向导工具条。
在注塑模向导】工具条中单击模具工具按钮,弹出模具工具工具条。
34(5)使用沿边界1功能进行补面。
在模具工具工具条中单击边界1按钮,弹出开始对话框。
在开始对话框中取消选中“按面的颜色”选框, 然后通过“接受”和“下一路径”的方式选择封闭的边界,图5-5所示。
图5-5使用沿边界功能补面使用沿边界功能进行补面。
参考步骤(5)继续补另外3个破孔,结果如图5-6。
2. 开粗(1)进入编程界面。
按Ctrl+Alt+M 组合键,弹出【加工环境】对话框,如图5-8所示。
选择mill contour 的方式,然5后单击【初始化】按钮进入程主界面。
狂野飙车编程手柄操作方法

狂野飙车编程手柄操作方法
使用手柄进行狂野飙车的编程操作方法如下:
1. 首先,确保你的手柄已连接到计算机,并且计算机已正确安装了所需的驱动程序。
2. 打开游戏中的设置菜单,找到控制器设置选项。
3. 在控制器设置选项中,你应该能够看到连接的手柄。
4. 选择手柄并进入其设置页面。
这里你可以配置手柄的各个按钮和摇杆,以对应你在游戏中的操作。
5. 通常来说,你可以使用手柄上的摇杆来控制车辆的转向和加减速。
你可以将左摇杆指定为方向控制,右摇杆指定为加减速控制。
6. 如果手柄上有额外的按钮,你可以将它们配置为进行特殊操作,如使用道具、刹车等。
7. 完成手柄的设置后,保存并退出设置菜单。
8. 现在你可以开始使用手柄进行狂野飙车了。
根据你的手柄设置,使用摇杆来
控制转向和加减速,使用按钮来进行特殊操作。
请注意,以上步骤适用于大多数游戏和手柄。
在某些游戏中,你可能需要进行额外的设置或校准手柄。
具体的操作方式可以参考游戏的说明书或查阅游戏的官方支持文档。
C#游戏手柄编程

C#游戏⼿柄编程参考学习博客:看了这⼀篇博客,直接⽤了上⽂的例⼦,发送数据的确会遇到发送n多消息这个问题,所以想⽅法解决⼀下,顺便记录⼀下。
主动⽅式:按⾃⼰的需要去获取游戏⼿柄的状态信息。
需要⽤到如下的API函数 joyGetPos和joyGetPosEx,因为joyGetPos只能获取到1、2、3、4按钮的状态,所以使⽤joyGetPosEx函数MMRESULT joyGetPosEx(UINT uJoyID,LPJOYINFOEX pji);uJoyID 要查询的操纵杆的标识。
有效值uJoyID范围从零(JOYSTICKID1)15。
PJI 指针到⼀个joyInfoEx结构包含扩展的位置信息和导航键的按键状态。
你必须设置的dwSize和dwFlags中成员或joyGetPosEx,否则将失败。
从返回的信息joyGetPosEx取决于你在指定的标志dwFlags中。
joyInfoEx结构体如下typedef struct joyinfoex_tag {DWORD dwSize;DWORD dwFlags;DWORD dwXpos;DWORD dwYpos;DWORD dwZpos;DWORD dwRpos;DWORD dwUpos;DWORD dwVpos;DWORD dwButtons;DWORD dwButtonNumber;DWORD dwPOV;DWORD dwReserved1;DWORD dwReserved2;} JOYINFOEX; 换成C#中的代码可以写成如下:[StructLayout(LayoutKind.Sequential)] //顺序布局public struct JOYINFOEX{/// <summary>/// Size, in bytes, of this structure.//⼤⼩,以字节为单位/// </summary>public int dwSize;/// <summary>/// Flags indicating the valid information returned in this structure. Members that do not contain valid information are set to zero.标志,指⽰在该结构返回的有效信息。
用VC5.0实现对游戏杆的编程

用VC5.0实现对游戏杆的编程在WINDOWS95/98中有一个JoystickProperties(游戏杆属性)控制面板。
只要你拥有一个支持Joystick连接口的声卡和一个游戏杆,你就能享受它提供的强大功能。
在此介绍给大家如何用Visual C++来实现对游戏杆的编程,希望能对大家有所帮助。
一捕获与释放游戏杆那么如何用Visual C++5.0来实现对游戏杆的编程呢?首先必须能捕获游戏杆。
在这里我们使用joySetCapture函数来实现这一点。
下面是joySetCapture函数的定义及其每个参数的描述。
intjoySetCapture(HWND hwnd,UNIT uJoyID,UNIT uPeriod,BoolfChanged);[1] Hwnd -----父窗口句柄。
[2] uJoyID----指定游戏杆,它可以是JOYSTICKID1或JOYSTICKID2。
[3] uPeriod----每隔给定的轮询间隔就给应用程序发送有关游戏杆的信息。
这个参数是以微妙为单位的轮询频率。
以下为捕获游戏杆消息的程序代码intCJaystickDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){int result;if (CDialog::OnCreate(lpCreateStruct) == -1)return -1;result=joySetCapture(CDialog::m_hWnd, JOYSTICKID1, 0, FALSE);if(result==JOYERR_NOCANDO){MessageBeep(MB_ICONEXCLAMATION);MessageBox("不能捕获游戏杆", NULL, MB_OK | MB_ICONEXCLAMATION);return -1;}if(result==JOYERR_UNPLUGGED){MessageBeep(MB_ICONEXCLAMATION);MessageBox("游戏杆未与系统连接", NULL, MB_OK | MB_ICONEXCLAMATION);return -1;}return 0;}一旦开始捕获游戏杆消息,就可以检查从设备返回的消息。
学习编程手柄遥控、微调和示教

机器人设计与制作认知课程学习手柄遥控、微调和示教(2课时)可以用一个基础电路作为平台,包括一个圆周舵机,一个任意传感器。
安装红外接收头。
一、编程手柄的遥控功能主控板有8个输出端口,由编程手柄的4个摇杆控制,每个摇杆控制2个端口。
摇杆慢慢推,舵机慢慢转;摇杆推到底,舵机按默认程序的最快速度转。
想让两个电机同时转,就斜着推。
手柄详细说明参见《使用指南》第9页。
2号端口舵机正转2号端口舵机反转1号端口舵机反转1号端口舵机正转4号端口舵机正转4号端口舵机反转3号端口舵机反转3号端口舵机正转控制5、6路端口控制7、8路端口主控板与遥控手柄通道必须匹配。
二、编程手柄的舵机微调功能舵机使用久了,就会偏离中心位置,表现是:松开摇杆后,舵机不立即停转。
因此需要微调。
用“探索者”编程手柄微调舵机非常方便。
经常需要微调的是圆周舵机,标准舵机一般不需要微调,但是当你组装完某个机构之后才发现标准舵机角度不对时,可以用微调来改变其角度。
例:微调1号端口舵机。
按下adjust按钮,同时推动摇杆。
舵机会越转越慢,舵机停转时松手。
如果越转越快,就把摇杆推到另一个方向。
三、遥控手柄的示教编程功能示教编程(Teaching Programming)是工业领域常用的机器人编程方式.“示教编程”指通过下述方式完成程序的编制:由人工导引机器人末端执行器,或由人工操作导引机械模拟装置,或用示教盒(与控制系统相连接的一种手持装置,用以对机器人进行编程或使之运动)来使机器人完成预期的动作;“作业程序”(任务程序)为一组运动及辅助功能指令,用以确定机器人特定的预期作业,这类程序通常由用户编制。
由于此类机器人的编程通过实时在线示教程序来实现,而机器人本身凭记忆操作,故能不断重复再现。
自20世纪50年代末至90年代,世界上应用的工业机器人绝大多数为示教再现型工业机器人(即第一代机器人)。
在80年代之前,以人工导引末端执行器(俗称手把手示教)及机械模拟装置两种示教方式居多,在点到点(点位控制)和不需要很精确路径控制的场合,用上述示教方式可降低成本;20世纪80年代后半期至90年代生产的工业机器人一般都具有人工导引和示教盒示教两种功能。
易语言编程实现游戏手柄到键盘映射

保存方案和加载方案相反, 代码如下:
4.5 应用 当单击 “应用方案” 按钮后, 仅将选中的方案复制到当前
映射方案中就可以了, 代码如下:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
在方案加载和保存中, 使用的编码和解码手柄数据结构的 子程序如下:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
为了程序编写方便, 定义一个名为 “手柄数据结构” 的自
76 2009. 9
GAME PROGRAM
游戏编程
中显示的方案顺序一致。 为描述方便, 该数组在文章后面中称 为 “方案组”。 具体定义如表 2。
表2
图1
这 里 只 给 出 12 个 按 钮 的 定 义 , 变 量 类 型 都 采 用 文 本 型 , 保 存 其 对 应 的 键 盘 的 ASCII 码 数 字 , 剩 余 按 钮 定 义 的 原 理 一 样, 如表 3。
在对话框上分别拖入 “列表框”、 “超级列表框”、 “输入 设备” (DirectX 库)、 “超级菜单”
“状态栏” 和 5 个 “按钮” 控件, 并按照图中的标注命名, 如图 2 所示。
然后使用易语言的 API 助手 (在易语言目录的 wizard 目录 下) 向 “DLL 命令” 表中添加模拟键盘按键的 API 函数, 如图 3 所示。
方案的建立分为两个操作, (1) 向 “配置文件列表框” 中 新 添 加 一 条 记 录 ; (2) 维 护 “方 案 组 ”, 向 该 数 组 中 也 添 加 一 条记录。 在易语言中值得称赞的是, 数组操作不用考虑预先定 义的数组大小, 可以在运行过程中动态改变, 类似与 C++中的 Vector 模板。 代码如下:
VC读取游戏手柄按键

http:.aspx一些电子DIY们喜欢用游戏手柄来做控制,我把整理好的代码贴出了,供大家参考://////////////////////////////////////////////////////////////////////////////////// ///////////#include <stdio.h>#include <windows.h>#include <wxp/hidsdi.h>#include <wxp/hidpi.h>#include <setupapi.h>int main(int argc, char *argv[]){GUID HidGuid;HDEVINFO hDevInfo;DWORD MemberIndex = 0;SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;BOOL bSuccess = FALSE;PSP_DEVICE_INTERFACE_DETAIL_DATA pDeviceInterfaceDetailData;DWORD Length = 0;HANDLE hDeviceHandle;HIDD_ATTRIBUTES Attributes;WCHAR mString[256];TCHAR Buffer[256];PHIDP_PREPARSED_DATA pHidpPreparsedData;HIDP_CAPS hidPCaps;NTSTATUS status;BOOL find_flag = FALSE;DWORD nReadBytes = 0;BYTE *pInputReport;unsigned int i;HidD_GetHidGuid(&HidGuid);printf("GUID:%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",HidGuid.Data1, HidGuid.Data2, HidGuid.Data3, HidGuid.Data4[0],HidGuid.Data4[1],HidGuid.Data4[2],HidGuid.Data4[3],HidGuid.Data4[4],HidGuid.Data4[5],HidGuid.Data4[6],HidGuid.Data4[7]);hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_D EVICEINTERFACE);if(hDevInfo == INVALID_HANDLE_VALUE){printf("符合HID规范的USB设备发生错误\n");return -1;}printf("正在查找游戏手柄...\n");DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);do{bSuccess=SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&HidGuid,MemberI ndex,&DeviceInterfaceData);if (!bSuccess){if(MemberIndex == 0){printf("没有找到可用的USB设备!\n");}else{printf("没有更多的可用的USB设备!\n");}SetupDiDestroyDeviceInfoList(hDevInfo);return -1;}printf("找到了一个USB设备:\n");SetupDiGetDeviceInterfaceDetail(hDevInfo,&DeviceInterfaceData,NULL,0,&Leng th,NULL);pDeviceInterfaceDetailData =(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);pDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);if(!SetupDiGetDeviceInterfaceDetail(hDevInfo, &DeviceInterfaceData,pDeviceInterfaceDetailData, Length, NULL, NULL)){printf("查找路径设备时出错!\n");}else{printf("设备路径:%s\n",pDeviceInterfaceDetailData->DevicePath );}hDeviceHandle=CreateFile(pD eviceInterfaceDetailData->DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READFILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);if (hDeviceHandle == INVALID_HANDLE_VALUE){printf("打开设备路径出错!\n");}else{HidD_GetAttributes(hDeviceHandle,&Attributes);//将有关该设备的标识显示出来printf("供应商ID\t:0X%04X\n",Attributes.VendorID);printf("产品ID\t:0X%04X\n",Attributes.ProductID);printf("产品版本号:0X%04X\n",Attributes.VersionNumber);}if(Attributes.VendorID == 0x0079 && Attributes.ProductID == 0x0006){printf("Found my device!!!\n");find_flag = TRUE;break;}//Sleep(1000);MemberIndex++;}while(bSuccess);if(find_flag ==TRUE){HidD_GetManufacturerString(hDeviceHandle,mString,sizeof(mString));if (wcstombs(Buffer,mString,256) == -1){Buffer[0] = 0;|}printf("生产商:\t%s\n",Buffer);HidD_GetProductString(hDeviceHandle,mString,sizeof(mString));if (wcstombs(Buffer,mString,256) == -1){Buffer[0] = 0;}printf("产品名称:\t%s\n",Buffer);if (!HidD_GetPreparsedData(hDeviceHandle,&pHidpPreparsedData)){printf("获取HID PREPAREDDATA失败!\n");return -1;}status = HidP_GetCaps(pHidpPreparsedData,&hidPCaps);if (status == HIDP_STATUS_SUCCESS){printf("CAP信息如下:\n");printf(" InputReportByteLength %d\n", hidPCaps.InputReportByteLength);printf(" OutputReportByteLength %d\n",hidPCaps.OutputReportByteLength);}pInputReport =malloc(hidPCaps.InputReportByteLength);memset(pInputReport,0,hidPCaps.InputReportByteLength);do{ReadFile(hDeviceHandle,pInputReport,hidPCaps.InputReportByteLength,&nR eadBytes,NULL);if (hidPCaps.InputReportByteLength == nReadBytes){for(i=0; i<(nReadBytes-1);i++){printf("%02x-",pInputReport[i]);}printf("%02x\r",pInputReport[nReadBytes-1]);}if (pInputReport[nReadBytes-2] == 0x20){printf("\n");break;}Sleep(10);}while(hidPCaps.InputReportByteLength ==nReadBytes);}CloseHandle(hDeviceHandle);return0;}/////////////////////////////////////////////////////////////////////////////////////// //////////////////////运行结果如下图:本文来自CSDN博客,转载请标http:.aspx出处明:。
Unity3D游戏开发之键盘、操纵杆和游戏手柄输入实现详解

Unity3D游戏开发之键盘、操纵杆和游戏手柄输入实现详解输入桌面Unity 支持键盘、操纵杆和游戏手柄输入。
可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,终端用户可以在简洁美观的配置对话框中配置键盘。
您可以设置操纵杆、手柄、键盘和鼠标,然后通过简单的脚本界面访问所有设置。
在脚本中,所有虚拟轴都按照名称访问。
在创建之时,所有工程都有以下默认的输入轴:1、水平线 (Horizontal) 和垂直线 (Vertical) 映射至 w、a、s、d 和方向键。
2、Fire1、Fire2、Fire3 分别映射至 Control、Option (Alt) 和 Command 键。
3、 Mouse X 和 Mouse Y 映射至鼠标移动增量。
4、 Window Shake X 和 Window Shake Y 对应窗口的移动。
添加新的输入轴如需添加新的虚拟轴,转到编辑 (Edit)->工程设置 (Project Settings)->输入(Input) 菜单。
也可在这里更改每个轴的设置。
每个轴可以对应操纵杆、鼠标的两个按钮或两个键盘按键。
名称 (Name)用来在脚本中检查该轴的字符串名称。
描述名称 (Descriptive Name)配置 (Configuration) 对话框输入选项卡中显示的正名称,用于独立构建。
描述负名称 (Descriptive配置 (Configuration) 对话框输入选项卡中显示的负名称,用于独立构建。
Negative Name)负按钮 (Negative Button)用于在负方向移动轴。
正按钮 (Positive Button)用于在正方向移动轴。
备选负按钮 (Negative用来在负方向移动轴的备选按钮。
Button)备选正按钮 (Alt Positive用来在正方向移动轴的备选按钮。
Button)重力 (Gravity)在没有按任何按钮时,轴下降到 0 的每秒单位速度。
《开发游戏杆代码》

开发游戏杆代码正如读者现在已经知道的,游戏主要通过一系列函数与游戏引擎交互,游戏引擎在游戏过程中的某些时刻调用这些函数。
要想向游戏引擎添加游戏支持,添加一个接收游戏杆通知的新函数是非常重要的。
这个函数名为HandleJoystick(),它的原型如下。
Void HandleJoystick(JOYSTATE jsJoystickState);HandleJoystick()函数只接受一个参数,这个参数属于一个名为JOYSTATE的自定义数据类型。
JOYSTATE数据类型用来在任何特定时刻传递游戏杆的状态。
程序清单7.1包含JOYSTATE的数据类型的代码。
程序清单7.1 JOYSTATE 数据类型包括描述游戏杆状态的常量标志typedef WORD JOYSTATE;const JOYSTATE JOY_NONE = 0x0000L;JOY_LEFT = 0x00001L,JOY_RIGHT = 0x00002L,JOY_UP = 0x00004L,JOY_DOWN = 0x00008L,JOY_FIRE1 = 0x0010L,JOY_ FIRE2 = 0x0020L;JOYSTATE数据类型是一个WORD值,它可以包含一个或多个表示游戏杆各方面状态的常量标志。
例如,如果游戏杆手柄当前处于左边位置,那么JOY_LEFT 标志就会出现在JOYSTATE值中。
可以在JOY_STATE数据类型中结合多个标志,因为一个游戏杆可以同时处于代码中列出的多种状态,所以这是很合理的。
读者在前面了解到,一个游戏杆是由一个惟一ID(实际上是一个数字)标识的。
还了解到,通过分析游戏杆手柄的移动范围,可以将游戏杆的移动简化到简单的方向。
这是通过为游戏杆创建一个移动矩形实现的,移动矩形决定了如果要记作一次方向性事件(上、下、左、右或某种组合),游戏杆手柄必须移动的距离。
移动矩形的作用就是在手柄移动了某一段最短距离的情况下生成游戏杆移动事件,如图7.5所示。
stm32游戏手柄实验

stm32游戏手柄实验#include "sys.h"#include "usart.h"#include "delay.h"#include "led.h"#include "beep.h"#include "key.h"#include "exti.h"#include "wdg.h"#include "timer.h"#include "tpad.h"#include "oled.h"#include "lcd.h"#include "usmart.h"#include "rtc.h"#include "wkup.h"#include "adc.h"#include "dac.h"#include "dma.h"#include "24cxx.h"#include "flash.h"#include "rs485.h"#include "can.h"#include "touch.h"#include "remote.h"#include "joypad.h"const u8*JOYPAD_SYMBOL_TBL[8]= {"Right","Left","Down","Up","Start","Select","A","B"};//手柄按键符号定义int main(void){u8 key;u8 t=0,i=0;Stm32_Clock_Init(9); //系统时钟设置uart_init(72,9600); //串口初始化为9600delay_init(72); //延时初始化LED_Init(); //初始化与LED连接的硬件接口LCD_Init(); //初始化LCDusmart_dev.init(72); //初始化USMARTJOYPAD_Init(); //手柄初始化POINT_COLOR=RED;//设置字体为红色LCD_ShowString(60,50,200,16,16,"WarShip STM32");LCD_ShowString(60,70,200,16,16,"JOYPAD TEST");LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(60,110,200,16,16,"2012/9/12");LCD_ShowString(60,130,200,16,16,"KEYVAL:");LCD_ShowString(60,150,200,16,16,"SYMBOL:");POINT_COLOR=BLUE;//设置字体为红色while(1){key=JOYPAD_Read();if(key!=0XFF){LCD_ShowNum(116,130,key,3,16);//显示键值for(i=0;i<8;i++){if((key&(1<< bdsfid="114" p=""><>{LCD_Fill(60+56,150,60+56+48,150+16,WHITE);//清除之前的显示LCD_ShowString(60+56,150,200,16,16,(u8*)JOYPAD_SYMBO L_TBL[i]);//显示符号}}}delay_ms(10);t++;if(t==20){t=0;LED0=!LED0;}}}。
编程手柄的制作技术

本技术新型公开了一种编程手柄,涉及可编程手柄技术领域,包括底壳和手柄主板,底壳上有一凹台,该凹台可与手柄主板完美贴合,底壳与凹台组合时,在手柄背面与凹台的接触处黏贴双面胶,从而可以保证在使用的过程中外壳不易脱落,手柄主板上集成了五向摇杆、电位器滑杆、声音传感器、光线传感器、复位开关、指示灯、支持四路模拟量输入,滑动电位器的内部固定连接有一个可沿X轴移动的电位器推杆帽,光线传感器和声音传感器以及五向摇杆在手柄主板上沿Y轴分布,借助声音传感器和光线传感器,可以实现电脑中的虚拟角色与现实世界中的声音、光线的互动,有效扩充孩子们做实验的趣味性及可行性。
权利要求书1.一种编程手柄,包括底壳(1)以及设置在底壳(1)内部的手柄主板(2),其特征在于:所述手柄主板(2)的上表面分别集成设置有滑动电位器(3)、复位开关(5)、数据接口端子(6)、指示灯(7)、模拟量输入端子(8)、五向摇杆(9)、光线传感器(11)以及声音传感器(12),所述滑动电位器(3)的内部固定连接有一个可沿X轴移动的电位器推杆帽(4),所述五向摇杆(9)的上表面固定连接有摇杆帽(10),所述手柄主板(2)为一种矩形结构的构件,拥有两条长侧边和短侧边,所述滑动电位器(3)和五向摇杆(9)分别位于两条短侧边的位置上,所述模拟量输入端子(8)和数据接口端子(6)分别位于两条长侧边的位置上,所述复位开关(5)位于模拟量输入端子(8)的一侧位置,所述指示灯(7)位于数据接口端子(6)的一侧,所述模拟量输入端子(8)、五向摇杆(9)、指示灯(7)在手柄主板(2)上沿X轴分布,所述光线传感器(11)和声音传感器(12)以及五向摇杆(9)在手柄主板(2)上沿Y轴分布,所述光线传感器(11)的位置与滑动电位器(3)相邻。
2.根据权利要求1所述的一种编程手柄,其特征在于:所述底壳(1)的内部固定开设有与手柄主板(2)完美贴合的凹台(14),所述手柄主板(2)的背面与凹台(14)之间通过双面胶实现粘贴固定。
三菱st语言编程实例_PLC用ST语言在CODESYS软件中,编写手柄控制程序实例

三菱st语⾔编程实例_PLC⽤ST语⾔在CODESYS软件中,编写⼿柄控制程序实例⾸先定义:PROGRAM handctrlVARHandX:UINT;HandY:UINT;Joy_XL:u4_20var; (*⼿柄X轴 左移*)Joy_XR:u4_20var; (*⼿柄X轴 右移*)Joy_YUP:u4_20var; (*⼿柄Y轴 上移*)Joy_YDW:u4_20var; (*⼿柄Y轴 下移*)Joy_XLu:UINT;(*⼿柄X轴 左移输出值*)Joy_XRu:UINT;(*⼿柄X轴 右移输出值*)Joy_YUPu:UINT;(*⼿柄Y轴上移输出值*)Joy_YDWu:UINT;(*⼿柄Y轴下移输出值*)END_VAR然后编写程序部分:(*⼿柄上移*)Joy_YUP(x:=handle_AinY , (*Y轴的端⼝采集端数据*)xMin:=32750 , (*Y轴中位*)xMax:=58000 , (*Y轴上移动最⼤值*)yMin:= 0,yMax:=18500 ); (*给的资料⽐例阀资料显⽰最⼤极限电流是1A, 电阻是13.4欧姆。
测量下给PWM端⼝上数据多⼤值是电压是13V,并把此值作为最⼤开启的电压数值*)Joy_YUPu:=REAL_TO_UINT(Joy_YUP.y);(*⼿柄Y轴上移输出值*)(*⼿柄下移*)Joy_YDW(x:=handle_AinY , (*Y轴的端⼝采集端数据*)xMin:=6500 , (*Y轴下移动最⼤值*)xMax:=32650 , (*Y轴中位*)yMin:= 0,yMax:=18500 ); (*给的资料⽐例阀资料显⽰最⼤极限电流是1A, 电阻是13.4欧姆。
测量下给PWM端⼝上数据多⼤值是电压是13V,并把此值作为最⼤开启的电压数值*)Joy_YDWu:=REAL_TO_UINT (18500 - Joy_YDW.y );(*⼿柄Y轴下移输出值*)(*⼿柄X轴 左移*)Joy_XL(x:=handle_AinX , (*X轴的端⼝采集端数据*)xMin:=6400 , (*X轴左移动最⼤值*)xMax:=31950 , (*X轴中位*)yMin:= 0,yMax:=18500 ); (*给的资料⽐例阀资料显⽰最⼤极限电流是1A, 电阻是13.4欧姆。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并且根据不同的uJoyID值,系统发送的消息号又会有所不同,如对于JOYSTICKID1系统将会分别发送以下消息包:
joyGetThreshold 查询指定的游戏杆设备的当前移动阈值
joySetThreshold 设置指定的游戏杆设备的移动阈值
其中,根据调用不同的方法又可分为两种方式。
1)被动方式:
调用joySetCapture方法,向系统申请对某个游戏手柄的捕捉,如果成功申请,系统将会定时将此游戏手柄的状态信息通过消息方式通知到我们的某个窗口上。
joyGetDevCaps 查询获取指定的游戏杆设备以确定其性能
joySetCapture 向系统申请捕获某个游戏设备并定时将该设备的状态值通过消息发送到某个窗口
joyReleaseCapture 释放对某个游戏设备的捕获
joyGetPos 获取游戏设备的坐标位置和按钮状态
joyGetPosEx 获取游戏设备的坐标位置和按钮状态
对游戏手柄进行操作,大概有两种方式:采用系统API或者使用DirectInput操作游戏手柄设备。
采用系统API是一种最简单的方式,因为系统已帮我们封装好了所有细节,我们只要在程序中定时取得游戏手柄设备的状态就可以了(轮循)。
操作游戏手柄(杆)的API有以下几个:
函数名称 函数说明
joyGetNumDevs 获取当前系统支持的游戏设备数量
并且要注意!不管你有没有按游戏手柄上的按钮,系统也会定时发送MM_JOYXMOVE消息!!
怎样判断按了哪些键?
在消息包中,游戏手柄的状态信息(按钮状态)分别存储在消息包中的WParam与LParam参数。
WParam参数:
对于游戏手柄来说WParam存储的是除了上下左右四个方向键之外的所有按钮中当前被按下的按钮值,它的值是一个复合值。如它的值为JOY_BUTTON1 | JOY_BUTTON2时,就表明按下的按键是1号和2号按钮。
2)LParam参数:
此参数存储的是游戏手柄的坐标参数,并且此参数的高16位存储的是Y坐标值,低16位存储的是X坐标值。
而对于游戏手柄来说,判断上下左右四个方向键有没有被按下就是通过此参数进行判断的。如果当四个方向键都没有被按下时,表示当前游戏手柄处于中心坐标中!也就是X,Y坐标都是在中心点位置上,而当某些方向键被按下时,X,Y坐标将根据所按的键向对应方向偏移。如当按了向右键,则X坐标向右偏移,Y坐标保持在中心点位置,而如果按了右、上两个方向键同时按下,则X坐标向右偏移,Y坐标向上偏移。所以我们可以根据LParam参数取得X,Y坐标的值,然后再根据其中心点来判断。
消息号 说明
MM_JOY1MOVE 当手柄的位置已变动或按了某些按钮时,将会发送此消息包。
MM_JOY1BUTTONDOWN 当手柄的A,B,C,D四个按钮中的一个或多个正被按下时,将会发送此消息包。
MM_JOY1BUTTONUP 当手柄的A,B,C,D四个按钮中的一个或多个正被弹起时,将会发送此消息包。
2)主动方式:
即是根据我们自己的需要,按需调用joyGetPos或joyGetPosEx方法查询获取某个游戏手柄的当前状态。
被动方式:
当我们调用joySetCapture方法向系统申请捕获某个游戏手柄后,如果成功,则返回JOYERR_NOERROR(值为0),否则返回其它值的话表示申请失败。并且在不再需要捕获游戏手柄时要记得调用joyReleaseCapture方法释放捕捉。