pygame.key.get_pressed()无效求助:按住A/D键无响应
问题原因与修复方案:Pygame按住按键无响应
核心问题
你代码里的keys_pressed = pygame.key.get_pressed()放在了游戏主循环的外部,只会在游戏启动时获取一次按键状态。之后的循环里一直用的是这张旧快照,自然无法检测到后续的按键按压操作,导致玩家移动无响应。
修复步骤
移动按键状态获取位置:把
keys_pressed = pygame.key.get_pressed()移到主循环内部,确保每帧都刷新当前按键状态:
修改后的game函数关键部分:def game(ShipWidth, ShipHeight): player = pygame.Rect(620, 700, ShipWidth, ShipHeight) BarMove = pygame.Rect(600, 550, 250, 100) edge = False clock = pygame.time.Clock() # 添加帧率控制 run = True while run == True: clock.tick(60) # 限制帧率为60FPS for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit() # 每帧重新获取按键状态 keys_pressed = pygame.key.get_pressed() if BarMove.x > 0 and edge == False: barsleft(BarMove) if BarMove.x < 50: edge = True if edge == True: barsright(BarMove) if BarMove.x > WIDTH - 300: edge = False PlayerMove(player, keys_pressed) draw(player, BarMove)额外优化:添加
pygame.time.Clock().tick(60)限制帧率,避免游戏运行过快,同时让玩家移动的速度更稳定可控。
原理说明
pygame.key.get_pressed()返回的是当前帧的按键状态快照,只有每帧都调用它,才能实时获取到按键的按压或释放状态。如果只调用一次,后续的按键操作不会更新这个变量的值,自然无法触发移动逻辑。
内容的提问来源于stack exchange,提问作者Oblivious21
相关产品推荐
相关产品推荐

