22
2019
12

如何解决Libgdx手柄的诸多问题(JXInput)

Libgdx的手柄库,能在windows下识别xbox手柄,也能正常响应按键、摇杆、扳机,但是不能震动,非常遗憾!

也能再Android下识别绝大部分蓝牙手柄,一般作为OUYA手柄来处理键值即可,少数会有不同。

比较坑爹的是windows和Android处理手柄的代码略有不同,比如xbox的RT、LT是线性的,Android下是键值,键值也完全不一样,这里需要分开处理。

有时候过于追求跨平台,反而会把问题复杂化。最近就发现项目的UI逻辑非常奇葩,都是为了兼顾手机操作导致的-_-||。其实完全可以为PC端、手机端设计不同的UI,既不会杂糅按键、手柄、触摸三种代码,也会让UI更精准地贴合目标玩家。

扯远了,Libgdx的手柄最最坑爹的就是跟steam的默认手柄设置冲突,只要开着steam游戏就不响应方向键。之前我的博客也介绍了如何在steam中关闭相关设置。但不可能每个玩家都知道都愿意先设置一下再进入游戏,这个严重的问题困扰了我很久,而且找不到解决方案,并且导致我的游戏高达34%的退款。

最后,不得不寻求手柄的替代方案,就是JXInput。

终于解决了兼容性问题,最爽的是终于支持震动了,振幅可调!

https://github.com/StrikerX3/JXInput

JXInput使用比较简单,看官方例子就OK,有几点需要注意的说明一下:

1)device.poll()需要循环或者线程中不断调用,手柄才会响应,无论是用监听器还是直接获取键值。(坑爹!官方说明代码更本看不出这一点)

2)JXInput只能在windows下使用,意味着不能跨平台,其他平台可以继续用Libgdx的手柄库。

3)steamworks后台一定要给项目设置VC2007库的依赖。


« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。