Python Pygame 两个精灵之间未检测到碰撞矩形

Python Pygame collision rect not detected between two sprites

我正在制作一款游戏,目前我一直在尝试让玩家与“硬币”“碰撞”。我已经更改了我所有的代码,使它们成为带有 类 的精灵,但它说 类 之一具有“无属性矩形”,这是播放器代码和碰撞代码(对格式感到抱歉,一直在一整天):

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface ((40, 40))
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (425), (400)
        self.movex = 0  # move along X
        self.movey = 0  # move along Y
        self.frame = 0  # count frames

    def control(self, x, y): # player movement
        self.movex += x
        self.movey += y

    def update(self):
        self.rect.x = self.rect.x + self.movex # updating the position
        self.rect.y = self.rect.y + self.movey


class Coin(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface ((40, 40))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(20, 780)), (random.randint(20, 230))

    def check_collision(self, Coin, Player):
        if pygame.sprite.collide_rect(Coin, Player):
            print("collide")

这是主函数循环:

def main():
    score_check = 0
    clock = pygame.time.Clock()
    run = True

    coin = Coin()
    PLAYER = Player()

    all_sprites = pygame.sprite.Group()
    all_sprites.add(coin, PLAYER)

    # drawing the layers of sprites
    def draw_window():
        WIN.fill(BLACK)  # background colour
        # score drawn
        global score_check
        score_print = SCORE_FONT.render("Score: " + str(score_check), 1, WHITE)
        WIN.blit(score_print, (30, 30))

        # displaying the images
        all_sprites.update()
        all_sprites.draw(WIN)
        pygame.display.update()

    while run:
        # game speed
        clock.tick(FPS)
        # draw window
        draw_window()

        for event in pygame.event.get():
            # checking quit function is pressed
            if event.type == pygame.QUIT:
                run = False
                pygame.quit()
                exit()

            coin.check_collision(Coin, Player)

您必须将播放器对象传递给 check_collision:

删除 Coin 参数:

class Coin(pygame.sprite.Sprite):
    # [...]

    def check_collision(self, player):
        if pygame.sprite.collide_rect(self, player):
            print("collide")

在应用程序循环而不是事件循环中调用 check_collision

while run:
    # game speed
    clock.tick(FPS)
    # draw window
    draw_window()

    for event in pygame.event.get():
        # checking quit function is pressed
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            exit()

    # INDENTATION
    #<--|
    coin.check_collision(PLAYER)