web-dev-qa-db-ja.com

Python

python programmでXBoxコントローラの入力をシミュレートしたい。アナログサムスティックと、可能であればオン/オフボタンの両方を使用したい。

Pythonでctypesを使用してキーボード入力をシミュレートすることに関するトピックを見つけました。たとえば、次のとおりです。 Python Simulate Keydown

通常のキーボードまたはマウスの「キーダウン」と同様にシミュレートすることはできますか?

8
Herka

同じ問題を持つ誰かがこのスレッドを見つける場合:

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

この方法で「バイナリ」/「デジタル」ボタンを更新することもできます。pyvjoygithubページにはさらにいくつかの例があります。調整にこのジョイスティックアプリを使用してみてください: http://www.planetpointy.co.uk/joystick-test-application/

最後の部分はX360CEを使用しており、vJoy "DigitalInput" DevideをXInputデバイスに変換します。したがって、PC /ゲームは、それを実際のXbox 360またはXbox Oneコントローラーと見なします。この最後の部分は、GTA 5などの公式のXboxコントローラーのみを許可する一部のゲームでのみ必要です。X360CEはこちらから入手できます。 http://www.x360ce.com/

これらすべてを組み合わせると、Pythonを介してこれらのゲームをプレイできます。 WASDを使用してニューラルネットワークをトレーニングすることは、ボタンを押すために1または0しか許可されないため、常に極端に機能するため、あまりうまく機能しないことを学びました。これらのコントロールを使用すると、よりスムーズなゲームコントロールを取得できます。

9
Herka