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

Pygame中使用WASD与方向键分别控制两个矩形移动的显示问题如何解决

问题根源

你的游戏主循环逻辑顺序错误,存在两次背景填充、两次画面更新操作:

  • 绘制完玩家1矩形后,你立刻调用win.fill((0, 0, 0))将整个窗口涂黑,直接覆盖了刚绘制的玩家1
  • 后续仅绘制玩家2的矩形就更新画面,因此永远只能看到一个矩形

修复方案

Pygame单帧的标准执行顺序如下,按这个逻辑调整代码即可:

  1. 处理所有输入事件、计算所有玩家的坐标变化
  2. 仅执行1次背景填充,清空上一帧内容
  3. 按顺序绘制所有需要展示的元素(所有玩家、UI等)
  4. 仅执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:09:02