如何解决AttributeError: module pygame.surface has no attribute rect问题
问题修复方案
代码中存在多个语法及逻辑错误,逐一修正如下:
- 未实例化
player类就直接调用类方法,类的实例方法必须作用于实例对象,不能直接用类名调用 move方法中向下移动的代码写错了属性名,你定义的玩家矩形是self.rect,向下移动时误写为self.rect_1show_player方法定义时仅接收1个参数,调用时错误传入了2个参数,且方法内直接用了全局的screen变量,参数逻辑混乱- 主循环没有每次刷新背景,玩家移动后会留下拖影
- 存在冗余的导入声明,容易引发命名冲突
修正后完整代码
import pygame pygame.init() # 基础配置 window_width, window_height = 1000, 500 window_fill_color = (255, 255, 255) screen = pygame.display.set_mode((window_width, window_height)) pygame.display.set_caption('main ludum dare 49 window') running = True class Player(object): def __init__(self): self.rect = pygame.Rect((500, 250, 25, 25)) def show_player(self, surface): pygame.draw.rect(surface, (0, 255, 251), self.rect) def move(self): key = pygame.key.get_pressed() if key[pygame.K_LEFT]: self.rect.move_ip(-1, 0) if key[pygame.K_RIGHT]: self.rect.move_ip(1, 0) if key[pygame.K_UP]: self.rect.move_ip(0, -1) if key[pygame.K_DOWN]: self.rect.move_ip(0, 1) # 实例化玩家对象 player = Player() while running: # 事件处理 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 刷新背景 screen.fill(window_fill_color) # 玩家逻辑 player.move() player.show_player(screen) # 更新画面 pygame.display.update() pygame.quit()
内容的提问来源于stack exchange,提问作者Tjebbe Faber
相关产品推荐
相关产品推荐

