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

Pygame按键仅在光标移动时生效问题排查求助

问题原因

代码的核心问题是逻辑缩进错误,你将按键检测、画面渲染的代码全部放在了for event in pygame.event.get()的遍历循环内部:

  • pygame的event.get()只有当系统产生新事件(比如鼠标移动、点击、按键按下抬起等)时才会返回非空列表,没有新事件时for循环不会执行内部代码
  • 你移动鼠标时会持续产生MOUSEMOTION事件,此时for循环不断执行,按键检测和渲染才会生效,没有事件时这些逻辑完全不运行,自然不会响应按键
修复方案

把按键检测、屏幕填充、线条绘制的代码调整缩进,移出事件遍历循环,放到主while循环的层级即可,不需要额外配置其他参数,也不需要更换技术方案。
修复后的完整代码如下:

import pygame
from pygame import key

pygame.init()

width = 1360
height = 705
screen = pygame.display.set_mode([width, height])
clock = pygame.time.Clock()

pygame.display.set_caption("Test Game Window")

x_offset = 0
y_offset = 0

running = True
while running:
    keys = pygame.key.get_pressed()
    # 事件遍历循环仅处理事件类逻辑
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 按键检测、渲染逻辑放到主循环层级,每帧都会执行
    if keys[pygame.K_LEFT]:
        x_offset -= 5
    if keys[pygame.K_RIGHT]:
        x_offset += 5

    screen.fill((0, 0, 0))
    pygame.draw.line(screen, (255, 255, 255), (int(width/2 + x_offset), int(0 + y_offset)),
                     (int(width/2 + x_offset), int(height + y_offset)), 3)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:15:00