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配合事件循环就能实现需求:
实现步骤及代码示例
- 初始化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()}")
- 在事件循环中捕捉控制器按键事件
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
相关产品推荐
相关产品推荐

