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

如何解决AttributeError: module pygame.surface has no attribute rect问题

问题修复方案

代码中存在多个语法及逻辑错误,逐一修正如下:

  • 未实例化player类就直接调用类方法,类的实例方法必须作用于实例对象,不能直接用类名调用
  • move方法中向下移动的代码写错了属性名,你定义的玩家矩形是self.rect,向下移动时误写为self.rect_1
  • show_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:18:02