python - 用 Python 模拟 XBox Controller 输入

标签 python xbox directinput xinput

我想让我的 python 程序模拟 XBox Controller 输入。 模拟摇杆和开/关按钮(如果可能)。

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

是否可以在普通键盘或鼠标上模拟类似于“按键”的操作?

最佳答案

如果遇到同样问题的人会发现这个线程:

我用 vJoy、pyVJoy 和 x360ce 解决了这个问题。

vJoy 提供了一个SDK 和驱动来模拟输入设备。你可以有操纵杆,游戏 handle 等。 PyvJoy 允许您访问这些驱动程序并在 python 中模拟输入。 https://github.com/tidzo/pyvjoy pyvJoy 为“模拟”摇杆使用 0 到 32767 之间的值。 例如,要使 xbox Controller 的左摇杆处于中间位置,您可以将 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()

您也可以通过这种方式更新“二进制”/“数字”按钮,pyvjoy github 页面有更多示例。 尝试使用此操纵杆应用程序进行校准:http://www.planetpointy.co.uk/joystick-test-application/

最后一部分是使用X360CE,就是将vJoy“DigitalInput”Devide变成一个XInput设备。所以 PC/游戏认为它是一个真正的 Xbox 360 或 Xbox One Controller 。最后一部分仅适用于某些只允许使用官方 Xbox Controller 的游戏,例如 GTA 5。 您可以从这里获取 X360CE:http://www.x360ce.com/

所有这些结合起来让我可以通过 python 玩这些游戏。我了解到使用 WASD 训练神经网络效果不佳,因为它总是表现得极端,因为它只允许 1 或 0 按下按钮。通过这些控件,您可以获得更流畅的游戏控制。

关于python - 用 Python 模拟 XBox Controller 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43483121/

相关文章:

python - 散列生成器表达式

xbox360 - Xbox 360 应用程序开发快速入门

C++ WinRT - XAudio2 是否支持 Xbox One 平台?

c++ - 为什么我的 DirectInput8 堆栈会溢出?

c - “枚举设备”: is not a member of 'IDirectInput8A'

python - 由tensorflow中的索引张量指定的切片2d张量

python - 如果我们使用 Scikit-Learn 库的 RandomForestRegressor 有多个输出,如何计算分割的杂质减少量

python - Robot Framework 是有状态的还是无状态的?

css - UWP、WinJS 元素、scrollview 适用于本地计算机但不适用于 XBOX

java - 在 Java 中使用 directinput 发送 key ?