使用Python模拟XBox控制器输入

Her*_*rka 8 python xbox directinput xinput

我希望我的python程序模拟XBox控制器输入.如果可能,两个模拟拇指杆和开/关按钮.

我在python中找到了关于使用ctypes模拟键盘输入的主题,例如: Python模拟keydown

是否可以模拟它类似于普通键盘或鼠标上的"keydown"?

Her*_*rka 9

万一有相同问题的人会找到这个帖子:

我用vJoy,pyVJoy和x360ce解决了这个问题.

vJoy提供了一个SDK和驱动程序来模拟输入设备.你可以有操纵杆,游戏手柄等.PyvJoy允许你访问这些驱动程序并模拟python内部的输入. https://github.com/tidzo/pyvjoy pyvJoy使用0到32767之间的值作为"模拟"棒.例如,要将xbox控制器的左侧拇指杆置于中间位置,请将XAxis和YAxis置于32767的1/2中.

因此,对于输入值介于0和1之间的我,我将它们与此值相乘.在我的代码中它看起来像这样:

MAX_VJOY = 32767
self.j = pyvjoy.VJoyDevice(1)

def play_function(self,X,Y,Z,XRot):
    self.j.data.wAxisX = int(X * self.MAX_VJOY)
    self.j.data.wAxisY = int(Y * self.MAX_VJOY)
    self.j.data.wAxisZ = int(Z * self.MAX_VJOY)
    self.j.data.wAxisXRot = int(XRot * self.MAX_VJOY)
    j.update()
Run Code Online (Sandbox Code Playgroud)

你也可以用这种方式更新"二进制"/"数字"按钮,pyvjoy github页面还有一些例子.尝试使用此操纵杆应用程序进行校准:http://www.planetpointy.co.uk/joystick-test-application/

最后一部分是使用X360CE,将vJoy"DigitalInput"Devide转换为XInput设备.所以PC /游戏认为它是一个真正的Xbox 360或Xbox One控制器.最后一部分只适用于一些只允许官方Xbox控制器的游戏,比如GTA 5.你可以从这里获得X360CE:http://www.x360ce.com/

所有这些结合使我可以通过python玩这些游戏.我了解到使用WASD训练神经网络并不能很好地工作,因为它总是极端地起作用,因为它只允许1或0按下按钮.使用这些控件,您可以获得更流畅的游戏控制.