You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame._sdl2.controller模块是否存在?如何正确使用该模块?

Pygame控制器支持问题解答

关于pygame._sdl2.controller的状态

pygame._sdl2.controller是Pygame早期基于SDL2的实验性内部模块,从未正式对外公开,在Pygame 2.x版本(包括你使用的2.5.0)中已经被移除或整合到官方主推的pygame.joystick模块里,所以你会遇到找不到该属性的报错。目前官方完全推荐用pygame.joystick处理所有控制器/摇杆设备。

如何获取匹配CONTROLLER_BUTTON事件的按键输入

你提到的CONTROLLER_BUTTON_A、CONTROLLER_BUTTON_B这类常量,本身就和Pygame事件系统兼容,不需要依赖废弃的controller模块,用pygame.joystick配合事件循环就能实现需求:

实现步骤及代码示例

  1. 初始化joystick模块并加载控制器
import pygame

pygame.init()
pygame.joystick.init()

# 初始化所有连接的控制器
for i in range(pygame.joystick.get_count()):
    joystick = pygame.joystick.Joystick(i)
    joystick.init()
    print(f"已加载控制器: {joystick.get_name()}")
  1. 在事件循环中捕捉控制器按键事件
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        # 捕捉控制器按键按下事件
        if event.type == pygame.CONTROLLER_BUTTON_DOWN:
            if event.button == pygame.CONTROLLER_BUTTON_A:
                print("A键按下")
            elif event.button == pygame.CONTROLLER_BUTTON_B:
                print("B键按下")
            elif event.button == pygame.CONTROLLER_BUTTON_X:
                print("X键按下")
            elif event.button == pygame.CONTROLLER_BUTTON_Y:
                print("Y键按下")
        
        # 捕捉控制器按键释放事件
        if event.type == pygame.CONTROLLER_BUTTON_UP:
            if event.button == pygame.CONTROLLER_BUTTON_A:
                print("A键释放")

补充说明

  • 这些CONTROLLER_BUTTON_*常量是标准化的控制器按键映射,不管你用的是Xbox、PlayStation还是其他兼容控制器,Pygame都会自动将硬件按键映射到这些常量上,无需手动适配。
  • 如果需要主动查询按键状态,可以用joystick.get_button()方法,传入对应常量的数值即可,比如joystick.get_button(pygame.CONTROLLER_BUTTON_A)会返回布尔值表示按键是否按下。

内容的提问来源于stack exchange,提问作者Dan Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:12