记一次尝试用脚本模拟手柄打游戏(一)

最近打游戏累了
想自动化打游戏
最开始是打算模拟键鼠方案的,但是吧,很快就遇到了问题。
对于常规的窗口来讲,ctypes库足以模拟键鼠输入了
但是进到第三人称视角的游戏里面吧,键盘模拟还好说,鼠标移动他视角不动啊
这就很令人头疼了。
我又检测了一下鼠标的位置,发现鼠标的坐标其实一直锁定在窗口的正中心。
也就是说游戏检测鼠标移动来调整视角是不能通过脚本让鼠标向某个坐标移动来实现的。
可能可以从更底层的驱动来模拟鼠标运动进而实现这个操作,但是我决定何不用一个更简单的方法——模拟手柄。

自动化手柄操作

vjoy

网上搜了一下,第一个考虑用的vjoy
python需要用的库是pyvjoy
当然还需要搭配一个测试工具来看我设置手柄对不对
测试工具

import pyvjoy
MAX_VJOY = 32767

j = pyvjoy.VJoyDevice(1)
for i in range(0x1,0x8000):
    
    j.set_axis(pyvjoy.HID_USAGE_X, i)

运行后发现

Unable to load vJoy SDK DLL.  Ensure that vJoyInterface.dll is present

回去看github页面发现
Currently vJoyInterface.dll is looked for inside the pyvjoy directory only so place the desired version of that file there to use. (Note: this library currently only works with the x86 dll!)
也就是说需要把dll放在pyvjoy的目录下,注意是pyvjoy的目录下,不是新写的代码的目录下。
在这里插入图片描述
此时再运行刚才的代码,可以在测试工具中看到摇杆的移动
在这里插入图片描述
进入一下debug模式,让他停在这里

打开steam的控制器页面可以看到已经检测到了vjoy手柄
在这里插入图片描述
在这里插入图片描述
通过set_axis可以让steam把摇杆识别出来。看来问题不大

但是啊,这个时候我就又遇到问题了,那就是vjoy这玩意他只有一个摇杆啊,我要设置右摇杆怎么办呢?
呜。。。
好像还是有解决办法,但是秉着不要重复造轮子的思想,毕竟时间有限每天还要正经工作还要打游戏,于是我又去找有没有什么直接模拟XBOX360或者XBOX ones手柄的方法,反正你得给我来个XINPUT对吧。

然后我就发现了一个东西,vgamepad

vgamepad

vgamepad是用来模拟XBox360 gamepad的,说明文档也比长久不更新的pyvjoy详细很多。
当然了,这个东西只支持windows。
如果你和我一样尝试在mac上通过pip安装,就会出现下面的情况。
在这里插入图片描述
windows就好说了,安装好然后重启。(他会自动给你安装viGem的,然后要求你重启)

我们打开一个xbox控制器测试软件来试试看。

在这里插入图片描述
最开始是没插手柄的,然后我们创建一个手柄

import vgamepad as vg

gamepad = vg.VX360Gamepad()

gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT)  # press the left hat button

gamepad.update()  # send the updated state to the computer

# (...) A and left hat are pressed...

gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_A)  # release the A button

gamepad.update()  # send the updated state to the computer

# (...) left hat is still pressed...
while 1:
    pass

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

脚本结束后这个设备会被拔出,然后就检测不到手柄了。
目前看来这个手柄的方案应该能用。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆沙粽子好吃嘛!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值