在 Pygame 中无法检测到 Xbox 控制器的移动

Posted

技术标签:

【中文标题】在 Pygame 中无法检测到 Xbox 控制器的移动【英文标题】:Cannot detect Xbox controller movements in Pygame 【发布时间】:2017-05-02 20:55:56 【问题描述】:

我一直使用 pygame 作为创建游戏的一种方式,我想将控制器游戏玩法融入游戏中。我一直在 pygame 上使用新的 Xbox One 控制器,并且能够在 pygame 等中检测到控制器,但是 pygame.get_event 函数都没有工作,并且即使我移动控制器的操纵杆并按下时也总是返回它们的默认值按钮也是如此。

我试过 pygame.event.pump() 无济于事。这是我的代码:

    xboxController = pygame.joystick.Joystick(0)
    xboxController.init()
    print(xboxController.get_name())
    print("Axes", (xboxController.get_numaxes()))
    print("Balls", xboxController.get_numballs())
    print("Buttons", xboxController.get_numbuttons())
    print("Hats", xboxController.get_numhats())
    if xboxController.get_init() == True: print("Initialized properly")

    while not found:
        trial += 1
        print(trial)
        pygame.event.pump()
        for a in range(0, xboxController.get_numaxes()):
            if round(xboxController.get_axis(a)*100) != 0:
                print(xboxController.get_axis(a))
        for b in range(0, xboxController.get_numballs()):
            if xboxController.get_ball(b) != 0: 
                print(xboxController.get_ball(b))
        for c in range(0, xboxController.get_numbuttons()):
            if xboxController.get_button(c) != False: 
                print(xboxController.get_axis(button(c)))
        for d in range(0, xboxController.get_numhats()):
            if xboxController.get_hat(d) != (0, 0): 
                print(xboxController.get_hat(d))

我打印出控制器的所有属性的第一部分工作正常,它似乎永远不知道控制器的操纵杆何时被移动。

【问题讨论】:

【参考方案1】:

我也在用 Xbox 控制器制作游戏,并且遇到了非常相似的问题。我的问题是通过使用pygame.event.get() 而不是pygame.event.pump() 解决的。您甚至不需要对结果做任何事情,只是获取事件似乎会使 pygame 更新操纵杆位置。

【讨论】:

感谢您的回复,我用 pygame.event.get() 替换了我的 pygame.event.pum(),但它似乎仍然无法正常工作。 嗯,奇怪。它是否成功检测到按钮按下? 根本没有检测到任何东西。我构建了上面的程序来测试一切的功能,但似乎没有任何效果。它都返回它们的默认值。 print(xboxController.get_numaxes()) 给出的数字是否正确? 是的。 while 循环上方的所有内容都与控制器一起工作,它只是检测其不起作用的动作。

以上是关于在 Pygame 中无法检测到 Xbox 控制器的移动的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pygame 设置 Xbox One 控制器触发器的范围?

SDL2 - 未检测到操纵杆?

碰撞检测不适用于pygame

GLFW无法识别Xbox控制器

Xbox One Internet Explorer JavaScript 按键

QGamepadManager 在 ubuntu 上没有检测到控制器断开连接