前面的博客《通过蓝牙HID将安卓手机模拟成鼠标和键盘》介绍了通过蓝牙将Android设备模拟成鼠标/键盘,但总归是个副产品,因为我一开始的想法是将Android机模拟成游戏手柄或方向盘,最后阴差阳错地实现了键鼠功能。经过一段时间的学习和研究后才实现了游戏方向盘的功能,所以才有了本文。先来一张图片看看,设备在《旋转轮胎》(又叫Spin Tires)的控制菜单中的效果。
如果我们的设备成功被Win10识别为游戏控制器的话,在游戏的控制设置页面就会看到我们自己的设备。那么在游戏控制页面可以看见,选择“方向盘”选项卡后出现方向盘设备选择的菜单,点击我们的设备名称就可以使用了。(图片是用手机拍摄的,因为游戏里无法使用Prt键截图,有知道如何DX截图的请指教)
下面看看游戏方向盘的简单Demo,打方向需要左右转动手机,左右两边的SeekBar代表油门和刹车,中间的8个按钮可以在游戏的控制页面设置不同的功能。离合器和换挡功能去掉了,测试发现还是自动挡开着舒服。力反馈FFB功能还在研究中。
下面看看在Win10中被正确识别的设备是什么样子的。
在测试我们APP的时候可以通过Win10的游戏控制器(控制面板->设备与打印机->设备(选择自己的手机名称)->右键->游戏控制器设置),可以方便地看到控制器的转向/刹车/按钮是否正常。
通过两个视频看看在游戏中的效果
在游戏的控制页面我们可以看到方向是通过X轴控制的,在程序实现时我是用手机的重力传感器获取手机转动的角度。代码的设定是,当手机逆时针转动85度轮胎就会向左打死,顺时针85度向右打死,-84~84度按比例锁定方向,不会像键盘的左右键那样要么向左打死或者向右打死。
1 /** 初始化传感器 */ 2 sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE); 3 sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 4 accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 5 sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); 6 sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);