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

Pygame封装player类后无输出无报错问题求助

问题排查及修复方案

核心错误点

  • pygame.draw.rect()返回的是Rect矩形区域对象,不是可绘制的Surface对象,原代码中用blit()绘制该返回值属于API调用错误
  • 按键移动逻辑修改的是全局变量x,没有修改player实例的x属性,实例坐标始终未更新
  • pygame.display.update()缩进错误,写在主循环外导致循环过程中屏幕不会刷新,看不到任何绘制内容
  • 自定义player类的绘制逻辑错误,不需要调用blit,直接在类内实现矩形绘制即可

修正后可运行代码

import pygame
pygame.init()
 
FPS = 60
SCREEN = pygame.display.set_mode((400,500))
pygame.display.set_caption('test')

x = 50
y = 450
vel = 3
width = 20
height = 20

class Player(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 3
    def draw(self, screen):
        # 直接在类内完成矩形绘制
        pygame.draw.rect(screen, (0,0,0), (self.x, self.y, self.width, self.height))

player = Player(x, y, width, height)
running = True
clock = pygame.time.Clock()

while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    # 修改实例的x属性,不是全局x
    if keys[pygame.K_a] and player.x > 0:
        player.x -= player.vel
    if keys[pygame.K_d] and player.x < 400 - player.width:
        player.x += player.vel

    SCREEN.fill((255, 255, 255))
    # 调用实例的draw方法绘制角色
    player.draw(SCREEN)
    # 放到循环内刷新屏幕
    pygame.display.update()

pygame.quit()

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:36:08