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