通过蓝牙将安卓手机模拟成PC赛车游戏方向盘手柄 您所在的位置:网站首页 手机模拟手柄玩电脑 通过蓝牙将安卓手机模拟成PC赛车游戏方向盘手柄

通过蓝牙将安卓手机模拟成PC赛车游戏方向盘手柄

2024-06-27 03:03| 来源: 网络整理| 查看: 265

前面的博客《通过蓝牙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); 1 /** 传感器事件onSensorChanged */ 2 double angleRate = 1000/85; 3 int LatestAngle = 0; 4 @Override 5 public void onSensorChanged(SensorEvent event) { 6 if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 7 geomagneticArr = event.values; 8 } 9 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 10 gArr = event.values; 11 if (!HidUitls.IsConnected()) 12 { return; } 13 14 SensorManager.getRotationMatrix(rArr, null, gArr, geomagneticArr); 15 SensorManager.getOrientation(rArr, valuesArr); 16 double degreeX= (int)Math.toDegrees(valuesArr[1]); 17 int angle = (int)Math.round(-degreeX*angleRate); 18 angle = angle>1000?1000:angle; 19 angle = angle


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有