首页 > 解决方案 > Pygame Breakout 中的 AttributeError

问题描述

我收到此错误:“球”对象没有属性“精灵”

发生错误的部分:

brick_collision_list = pg.sprite.spritecollide(brick, ball, False)
    for brick in brick_collision_list:
        print("collision")

球和砖类:

class Ball:
    def __init__(self):
        self.ball_img = pg.image.load("D:/MeineProgramme/Texturen/ball.png")
        self.x = 395
        self.y = 530
        self.speed = [0.12, -0.12]
        self.rect = self.ball_img.get_rect()


    def bounce(self):
        self.speed[0] = -self.speed[0]
        self.speed[1] = -0.12

class Brick(pg.sprite.Sprite):
    def __init__(self, color, width, height):
        super().__init__()

        self.image = pg.Surface([width, height])
        self.image.fill(BLACK)
        self.image.set_colorkey(BLACK)

        pg.draw.rect(self.image, color, [0, 0, width, height])
        self.rect = self.image.get_rect()
    def destroy(self):
        pass

请帮助我,我是初学者,不知道出了什么问题

标签: pythonpygamecollision-detectioncollisionattributeerror

解决方案


sprite.spritecollide是找到一个pygame.sprite.Sprite和一个pygame.sprite.Group精灵的碰撞。要找到 2 个Sprite
之间的碰撞,您必须使用:pygame.sprite.collide_rect

if pygame.sprite.collide_rect(brick, ball):
    print("collision")

另外Ball应该来自pg.sprite.Sprite

class Ball(pg.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pg.image.load("D:/MeineProgramme/Texturen/ball.png")
        self.rect = self.image .get_rect(center = (395, 530))
        self.speed = [0.12, -0.12]

推荐阅读