Android手柄数据全解析

news/2024/10/21 7:44:08/

前言

功能需要,获取物理手柄数据(本文章只针对处于Android模式的手柄),然后转换成云需要的数据。手柄数据主要分为两款,一个是轴数据,一个是按键数据,下面分别来说明。

判断是否是手柄设备

    public static boolean isJoyStick(InputEvent event) {boolean sourceJoy = (event.getSource() & InputDevice.SOURCE_JOYSTICK) ==InputDevice.SOURCE_JOYSTICK || (event.getSource() & InputDevice.SOURCE_GAMEPAD) ==InputDevice.SOURCE_GAMEPAD;boolean hasJoyMotion = event.getDevice().getMotionRange(MotionEvent.AXIS_X) != null && event.getDevice().getMotionRange(MotionEvent.AXIS_Y) != null;return sourceJoy && hasJoyMotion;}

一是判断是否还有左滚轴,二是判断是否来源是手柄,至于为什么判断是否包含左滚轴,因为市面上很多遥控器都有轴且设备源包含手柄。加上左滚轴判断可以更精确。

按键数据

按键数据可通过dispatchKeyEvent or onKeyDown,onKeyUp获得,手柄数据如下:

  • KeyEvent.KEYCODE_BUTTON_A : 手柄A键
  • KeyEvent.KEYCODE_BUTTON_B : 手柄B键
  • KeyEvent.KEYCODE_BUTTON_X : 手柄X键
  • KeyEvent.KEYCODE_BUTTON_Y : 手柄Y键
  • KeyEvent.KEYCODE_BUTTON_THUMBL : 手柄左滚轴按下
  • KeyEvent.KEYCODE_BUTTON_THUMBR : 手柄右滚轴按下
  • KeyEvent.KEYCODE_BUTTON_START : 手柄Start键
  • KeyEvent.KEYCODE_BUTTON_SELECT : 手柄Select键(部分手柄叫BACK)
  • KeyEvent.KEYCODE_BUTTON_L1 : 手柄L1键(部分设备LB键)
  • KeyEvent.KEYCODE_BUTTON_R1 : 手柄R1键 (部分设备RB键)
  • KeyEvent.KEYCODE_BUTTON_L2 : 手柄L2键(部分设备LT键)
  • KeyEvent.KEYCODE_BUTTON_R2 : 手柄R2键(部分设备RT键)

轴数据

轴数据通过onGenericMotionEvent(MotionEvent event)此方法传递。
通常手柄的有轴数据的功能组为,左摇杆,有摇杆,方向盘与 L2,R2两个扳机键,除L2与R2只对应一个轴值外其他设备均对应X,Y两个轴值,下面一一介绍:

左摇杆

对应轴:MotionEvent.AXIS_X,MotionEvent.AXIS_Y
取值范围: [-1.0 , 1.0]
说明:X代表横向数据,Y代表纵向数据。
轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_X);//左摇杆X轴value = event.getAxisValue(MotionEvent.AXIS_Y);//左摇杆Y轴

右摇杆

对应轴:MotionEvent.AXIS_Z,MotionEvent.AXIS_RZ
取值范围: [-1.0 , 1.0]
说明:Z代表横向数据,RZ代表纵向数据。
轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_Z);//右摇杆X轴value = event.getAxisValue(MotionEvent.AXIS_RZ);//右摇杆Y轴

方向盘

对应轴:MotionEvent.AXIS_HAT_X,MotionEvent.AXIS_HAT_Y
取值范围: [-1.0 , 1.0]
说明:AXIS_HAT_X代表横向数据,AXIS_HAT_Y代表纵向数据。X == 1.0 && Y == 0 代表右边,其他方位参考此值。

轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_HAT_X);//方向盘X轴value = event.getAxisValue(MotionEvent.AXIS_HAT_Y);//方向盘Y轴

左右扳机键(L2,R2)

部分手柄没有此轴。
对应轴:MotionEvent.AXIS_LTRIGGER,MotionEvent.AXIS_RTRIGGER
取值范围: [0 , 1.0]

轴数据的获取方式为:

        value = event.getAxisValue(MotionEvent.AXIS_LTRIGGER);//左扳机value = event.getAxisValue(MotionEvent.AXIS_RTRIGGER);//右扳机

结束

本篇文章对应的手柄模式需为Android模式,xBoxOne跟xBox360模式需读取usb数据且是另外一套数据解析模式。后续再说。Over。


http://www.ppmy.cn/news/439830.html

相关文章

android 手柄 一键宏,手柄一键宏 | 手游网游页游攻略大全

发布时间:2015-11-29 6.0"德拉诺之王"暗牧竞技场PVP提高15%伤害起手一键宏分享,希望对大家有帮助. 本宏是要有PVP2件套. 原理是:战斗前换PVP2件套.消散.取消消散.吃药水.换PVE装 ... 标签: 游戏资讯 攻略秘籍 发布时间:2015-09-15 …

家用工具套装_一套适合家用的简洁便携工具箱(WORKPOR)

一套适合家用的简洁便携工具箱(WORKPOR) 2017-04-06 20:32:20 5点赞 12收藏 4评论 万克宝WORKPRO 50件套高级家用工具组套【行情 报价 价格 评测】-土猫网土猫网,涵盖万克宝WORKPRO 50件套高级家用工具组套等上万种工具产品,万克宝WORKPRO 50件套高级家用工具组套价…

ns手柄pc驱动_颜值、功能、手感同步在线 北通宙斯机械游戏手柄体验

受本次疫情影响,今年的春节假一天都没得放,从年底就一直正常上班中,原本打算假期里肝游戏的计划也泡汤了。还好,在全国上下的通力协作下,近期的疫情抑制情况非常喜人,各种数据都趋崖式下降,生活…

Unity手柄UI设计

手柄这个其实国内用到的项目并不多,之前没有搜到有啥好的文章。恰好上个项目手柄接入是我处理的,今天就简单讲一讲。我也是个菜鸡,如果您觉得我说的有不对或者值得商榷的地方,欢迎您留言和本Vege探讨一下。 本文默认您稍微了解或…

精英二代手柄测试软件,微软精英手柄2代评测 继续引领行业标准

11月4日,微软的XBOX精英手柄2代(Xbox Elite Wireless Controller Series 2)就要发售了。2代的升级很多,其中有几个称得上关键。这次的单价也相应地来到了179美元。作为世界上最先进的手柄,精英手柄2代具体值不值,我们马上来看一下…

手柄按键显示器

#起因 朋友叫我去做一个可以用来在直播时候显示手柄按了哪些键的软件 #过程 ##官方例子 Google了下找到了pygame中有joystick包可以控制手柄。实例代码有全套控制手柄的方法,下图是实例的界面 ##项目实现 import pygame, os # Define some colors BLACK ( 0,…

手柄映射键盘_如何使用运动加加TAP手柄在PC上玩手游

运动加加TAP手柄,不仅仅是一款体感手柄,同时也是一款多功能的通用游戏手柄,支持智能电视、电视盒子,手机、PC等各种平台。 运动加加TAP手柄可以一键切换为标准游戏手柄,在标准游戏手柄模式下,左手触摸板自动…

vive手柄按键开发说明

如何开发一款VR游戏,实现输入交互至关重要,我们先来看看在unity中如何对vive手柄进行编程,包括对手柄圆盘的使用说法。 第一步,导入steamVR 插件和认识手柄: 如图,我们已经导入了SteamVR Plugin,下面的SteamVR绿色…