Pygame中使用WASD与方向键分别控制两个矩形移动的显示问题如何解决
问题根源
你的游戏主循环逻辑顺序错误,存在两次背景填充、两次画面更新操作:
- 绘制完玩家1矩形后,你立刻调用
win.fill((0, 0, 0))将整个窗口涂黑,直接覆盖了刚绘制的玩家1 - 后续仅绘制玩家2的矩形就更新画面,因此永远只能看到一个矩形
修复方案
Pygame单帧的标准执行顺序如下,按这个逻辑调整代码即可:
- 处理所有输入事件、计算所有玩家的坐标变化
- 仅执行1次背景填充,清空上一帧内容
- 按顺序绘制所有需要展示的元素(所有玩家、UI等)
- 仅执行1次全局画面更新
修正后代码
import pygame pygame.init() win = pygame.display.set_mode((500, 500)) pygame.display.set_caption("local multiplayer") # 玩家1变量 X = 200 Y = 200 Width = 40 Height = 60 Vel = 5 # 玩家2变量 x = 50 y = 50 width = 40 height = 60 vel = 5 run = True while run: pygame.time.delay(100) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() # 处理所有玩家移动逻辑 # 玩家1移动(WASD) if keys[pygame.K_a]: X -= Vel if keys[pygame.K_d]: X += Vel if keys[pygame.K_w]: Y -= Vel if keys[pygame.K_s]: Y += Vel # 玩家2移动(方向键) if keys[pygame.K_LEFT]: x -= vel if keys[pygame.K_RIGHT]: x += vel if keys[pygame.K_UP]: y -= vel if keys[pygame.K_DOWN]: y += vel # 仅填充一次背景 win.fill((0, 0, 0)) # 绘制所有玩家 pygame.draw.rect(win, (255, 255, 255), (X, Y, Width, Height)) # 玩家1白色 pygame.draw.rect(win, (255, 0, 0), (x, y, width, height)) # 玩家2红色,方便区分 # 仅更新一次全局画面 pygame.display.update() pygame.quit()
内容的提问来源于stack exchange,提问作者PhoenixAnton
相关产品推荐
相关产品推荐

