【问题标题】:Simulate XBox Controller Input with Python使用 Python 模拟 Xbox 控制器输入
【发布时间】:2017-09-14 22:32:05
【问题描述】:

我希望我的 python 程序模拟一个 Xbox 控制器输入。 如果可能的话,模拟拇指摇杆和开/关按钮。

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

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

【问题讨论】:

    标签: python xbox directinput xinput


    【解决方案1】:

    如果有同样问题的人会找到这个帖子:

    我用 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()
    

    您也可以通过这种方式更新“二进制”/“数字”按钮,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。使用这些控件,您可以获得更流畅的游戏控制。

    【讨论】:

    • 听起来您正在从事与我正在做的类似的项目。你能分享一下你是如何记录Xbox控制器输入的吗?你有可以显示的 github 页面或代码吗?我正在尝试使用输入包,但我遇到了一些同步问题。我在这里发布了我的问题,但还没有得到答复。 stackoverflow.com/questions/53803729/…
    • 嗨 @Allen 我从 TensorKart 项目 utils.file 中获得了 Xbox 控制器的记录部分:github.com/kevinhughes27/TensorKart/blob/master/utils.py
    • 能否说明如何使用 j.data 方法使用多个按钮? @Herka
    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2016-10-02
    相关资源
    最近更新 更多