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
相关产品推荐
相关产品推荐

