Pygame中右方向键移动正常 左、下方向键控制移动失效如何解决
问题根因
pygame.event.get()的机制是每次调用都会取出并清空当前事件队列里的所有事件,你在一帧内连续调用了三次这个方法:
- 第一次调用已经把队列里所有的按键按下事件全部消费完,只有写在这个循环里的右方向键判断能拿到事件
- 后面两次调用时事件队列已经是空的,左方向键、下方向键的判断逻辑永远不会触发,自然没有响应
另外你绘制玩家矩形时把y坐标写死为30,就算下方向键的逻辑正常,修改player_y变量也不会让矩形产生上下移动的效果,初始定义的player_y = -30完全没有被用到。
修正方法
把所有按键判断逻辑合并到同一个事件循环中处理,同时修正矩形绘制的坐标参数,使用你定义的player_y变量控制纵向位置。
修正后的可运行代码:
import pygame pygame.init() width, height = 800, 600 backgroundColor = 33, 33, 33 color = (0, 128, 255) screen = pygame.display.set_mode((width, height)) player_x = 30 player_y = 30 clock = pygame.time.Clock() running = True while running: screen.fill(backgroundColor) # 单帧内仅调用一次事件获取,统一处理所有交互事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: player_x += 10 if event.key == pygame.K_LEFT: player_x -= 10 if event.key == pygame.K_DOWN: player_y += 10 if event.key == pygame.K_UP: player_y -= 10 # 绘制矩形时传入player_y作为纵向坐标,不要写死固定值 pygame.draw.rect(screen, color, pygame.Rect(player_x, player_y, 60, 60)) pygame.display.update() clock.tick(60) # 限制最高帧率,避免不同设备下移动速度差异过大 pygame.quit()
内容的提问来源于stack exchange,提问作者Nearday
相关产品推荐
相关产品推荐

