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

pygame.key.get_pressed()无效求助:按住A/D键无响应

问题原因与修复方案:Pygame按住按键无响应

核心问题

你代码里的keys_pressed = pygame.key.get_pressed()放在了游戏主循环的外部,只会在游戏启动时获取一次按键状态。之后的循环里一直用的是这张旧快照,自然无法检测到后续的按键按压操作,导致玩家移动无响应。

修复步骤

  1. 移动按键状态获取位置:把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)
    
  2. 额外优化:添加pygame.time.Clock().tick(60)限制帧率,避免游戏运行过快,同时让玩家移动的速度更稳定可控。

原理说明

pygame.key.get_pressed()返回的是当前帧的按键状态快照,只有每帧都调用它,才能实时获取到按键的按压或释放状态。如果只调用一次,后续的按键操作不会更新这个变量的值,自然无法触发移动逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:02:44