轻松阅读或模拟游戏板

gamePyd的Python项目详细描述


游戏玩家

玩电子游戏很有趣,不是吗?那么为什么让Python玩游戏有什么不同呢? 至少应该很容易!当然?这就是这个图书馆的目的。 gamePyd为常见用例提供了现成的方法。它还提供了它使用的积木,使得在Windows上读取和模拟xbox控制器变得非常简单。在

在幕后,nefariusScpVBus被包装起来与XInput交互,XInput又被包装在方法中,让您可以使用首选的数据结构 并无缝地使用转换后的信息来控制游戏板。目前我们支持数据帧、列表和字典。在

先决条件

这个库应该可以使用python3.6之后的任何东西,尽管只在3.8.4和更高版本上进行过测试。目前唯一支持的操作系统是Windows10。在

要使用虚拟控制器对象,您需要ScpVBus。为了方便起见,one of it's versions包含在这个项目中。有关原始版本的更多信息,请访问nefarius's archived repo。 您可能还需要x360ce来简化与游戏的连接以及调试。我已经包括了它的旧版本,因为那是一个为我工作。在

安装ScpVbus

我们需要ScpVBus与Windows讨论有关gamepad的详细信息: 在ScpVBus-x64目录中打开提升的cmd命令提示符并运行devcon.exe install ScpVBus.inf Root\ScpVBus。成功运行由以下消息指示:

Device node created. Install is complete when drivers are installed...
Updating drivers for Root\ScpVBus from {Location}\PYXInput\ScpVBus-x64\ScpVBus.inf.
Drivers installed successfully.

安装

既然基本功都完成了,我们就应该按照惯例来做:

通过pip安装

^{pr2}$

你赶时间吗?

两个主要模块:

  • writePad包含对象[wPad],用于控制(最多4个)虚拟游戏板
    • 使用^{}方法分配作为字典传入的状态
    • 或将行作为状态的数据帧传递给^{}。在
  • 要读取游戏板(虚拟或物理),您可以使用readPad中的^{}对象
    • ^{}将在固定的时间内以给定的速率读取控制器,并返回一个数据帧。在
    • ^{}将执行相同的操作,但只在检测到控制器上的指定按钮按下时终止。在

如果你不着急,请去wiki pages。如果你想要求任何功能,请提出一个问题。在

测试控制器的读数

运行test_read()应该会给出(下面的输出是在没有插入控制器的情况下):

Testing controller in position 1:
This will just take a second. We'll look at the controller values in 200 milli-second intervals:
0---------------------------------------------
State:{'LT': 0, 'RT': 0, 'Lx': 0, 'Ly': 0, 'Rx': 0, 'Ry': 0, 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'START': False, 'SELECT': False, 'L3': False, 'R3': False, 'LB': False, 'RB': False, 'A': False, 'B': False, 'X': False,
 'Y': False}
---------------------------------------------
1---------------------------------------------
State:{'LT': 0, 'RT': 0, 'Lx': 0, 'Ly': 0, 'Rx': 0, 'Ry': 0, 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'START': False, 'SELECT': False, 'L3': False, 'R3': False, 'LB': False, 'RB': False, 'A': False, 'B': False, 'X': False,
 'Y': False}
---------------------------------------------
2---------------------------------------------
State:{'LT': 0, 'RT': 0, 'Lx': 0, 'Ly': 0, 'Rx': 0, 'Ry': 0, 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'START': False, 'SELECT': False, 'L3': False, 'R3': False, 'LB': False, 'RB': False, 'A': False, 'B': False, 'X': False,
 'Y': False}
---------------------------------------------
3---------------------------------------------
State:{'LT': 0, 'RT': 0, 'Lx': 0, 'Ly': 0, 'Rx': 0, 'Ry': 0, 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'START': False, 'SELECT': False, 'L3': False, 'R3': False, 'LB': False, 'RB': False, 'A': False, 'B': False, 'X': False,
 'Y': False}
---------------------------------------------
4---------------------------------------------
State:{'LT': 0, 'RT': 0, 'Lx': 0, 'Ly': 0, 'Rx': 0, 'Ry': 0, 'UP': False, 'DOWN': False, 'LEFT': False, 'RIGHT': False, 'START': False, 'SELECT': False, 'L3': False, 'R3': False, 'LB': False, 'RB': False, 'A': False, 'B': False, 'X': False,
 'Y': False}
---------------------------------------------
Better yet, you can use prettyRead() to sample as many times as desired for any required duration.
And then return it as a dataframe, can even write it to a file by supplying the filename.
    LT  RT  Lx  Ly  Rx  Ry     UP   DOWN   LEFT  RIGHT  START  SELECT     L3     R3     LB     RB      A      B      X      Y             time(ns)  timeDelta(ms)  error(ms)
0   0   0   0   0   0   0  False  False  False  False  False   False  False  False  False  False  False  False  False  False  1605620332292776700         9.9744   1.641067
1   0   0   0   0   0   0  False  False  False  False  False   False  False  False  False  False  False  False  False  False  1605620332301749900         8.9732   0.639867
2   0   0   0   0   0   0  False  False  False  False  False   False  False  False  False  False  False  False  False  False  1605620332310727300         8.9774   0.644067
3   0   0   0   0   0   0  False  False  False  False  False   False  False  False  False  False  False  False  False  False  1605620332319701900         8.9746   0.641267
4   0   0   0   0   0   0  False  False  False  False  False   False  False  False  False  False  False  False  False  False  1605620332328678100         8.9762   0.642867
Do note that the final three columns are metadata.

路线图

{a13下面列出了更多的重要特性:

  • []校准机器与机器之间的速度差,以便自动最小化与读取速率的偏差。在
  • []写入游戏板时检查延迟
  • []添加单元测试
  • []扩展wiki

学分

另请参见参与PYXinput的contributors的列表(该项目就是从中派生出来的)。在

致谢

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的第10个解决方案   Java中泛型的super和extends组合   Java Android OpenGL ES 2.0片段着色器texture2D不工作   在JList elementJava上按下时打开弹出窗口   字典Java数据结构允许对象上的布尔标志和排序?   java我该如何停止为AWS关系数据库服务收费?   java如何检查Google定位准确度是否提高?   java使用Mockito将方法存根在与被测类相同的类中(CUT)   java IntelliJIdea disable inspection:参数的实际值始终为   java CXF+多态POST数据   java命名空间“ads”未绑定   Sun(1999)的“Java编程语言的代码约定”的编码风格过时了吗?   JAVA中的隐式接口、类转换   javafx如何配置Java登录应用程序代码   java如何在滚动窗格中设置选项卡以及如何显示选项卡标题   java中等式和条件运算符的优先级   java Spring WS无法返回JAXB响应   错误响应上的java jaxws处理程序行为   java Hibernate HQL映射查询