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
相关产品推荐
相关产品推荐

