Pygame按键持续按下时物体无法连续移动问题求助
搞定Pygame按住按键无法连续移动的问题
嘿,我帮你排查出问题所在啦!你说用了pygame.key.get_pressed()还是没法让物体持续移动,其实核心问题不在按键检测上,而是你绘制玩家时的小疏忽~
问题出在哪?
你在代码里明明每帧都更新了x和y的位置,但绘制玩家的时候用的是start_x和start_y这两个初始值!这就导致你计算了半天位置变化,实际画在屏幕上的还是最初的位置,看起来就像没动一样😂
另外你的移动逻辑可以稍微优化下,原来的elif结构虽然处理了组合按键,但用独立的if判断会更直观,也不容易出优先级问题。
修改后的代码参考
while not crashed: # 处理退出事件 for event in pygame.event.get(): if event.type == pygame.QUIT: crashed = True # 每帧获取当前所有按键的状态 keys = pygame.key.get_pressed() # 初始化位置变化量 x_change = 0 y_change = 0 # 逐个判断按键状态,组合按键也能自然生效 if keys[pygame.K_w]: y_change -= 3 if keys[pygame.K_s]: y_change += 3 if keys[pygame.K_a]: x_change -= 3 if keys[pygame.K_d]: x_change += 3 # 更新物体位置 x += x_change y += y_change # 清空屏幕旧内容 screen.fill(WHITE) # 重点!绘制时要用更新后的x、y,而不是初始值 wall.changePosition(x, y) player.draw(x, y) # 把start_x, start_y换成当前的x和y all_sprites_list.draw(screen) # 更新显示内容 pygame.display.update() clock.tick(60)
几个关键修改点
- 绘制位置要同步更新:把
player.draw(start_x, start_y)改成player.draw(x, y),这样玩家的位置才会跟着你计算的数值变化。 - 简化移动逻辑:用单独的
if判断每个按键,不管是单按键还是组合按键(比如同时按W+D),都能正确累加位置变化,比原来的elif结构更灵活。 - 每帧重置变化量:先把
x_change和y_change设为0,再根据按键状态调整,避免上一帧的变化值影响当前帧。
再唠两句
pygame.key.get_pressed()本身就是用来检测持续按键的,你之前把它放在主循环里的位置是对的——只要每帧都调用一次,就能实时获取按键状态,实现按住时的连续移动。这次的坑主要是绘制时没用到更新后的位置,改完就没问题啦!
内容的提问来源于stack exchange,提问作者user5767766
相关产品推荐
相关产品推荐

