Python Pygame groupcollide不是';行不通

Python Pygame groupcollide不是';行不通,python,pygame,collision,Python,Pygame,Collision,为了练习python和pygame编程,我正在创建一个太空入侵者克隆。我使用pygame.sprite.groupcollide来检查玩家的子弹和敌人之间的碰撞,这很正常。然而,我尝试过在子弹摧毁敌人后使用这种碰撞检查来增加玩家的分数。所以,我创建了两个分数类,它们有自己的图像,在子弹击中敌人后会发生变化,以保持分数。然而,即使这两个类几乎相同,其中一个的碰撞检查工作正常,而另一个则不正常。最令人困惑的事实是,如果我改变顺序,将它们添加到一个组或不同的组中,其中一个将停止工作,另一个将得到修复。

为了练习python和pygame编程,我正在创建一个太空入侵者克隆。我使用pygame.sprite.groupcollide来检查玩家的子弹和敌人之间的碰撞,这很正常。然而,我尝试过在子弹摧毁敌人后使用这种碰撞检查来增加玩家的分数。所以,我创建了两个分数类,它们有自己的图像,在子弹击中敌人后会发生变化,以保持分数。然而,即使这两个类几乎相同,其中一个的碰撞检查工作正常,而另一个则不正常。最令人困惑的事实是,如果我改变顺序,将它们添加到一个组或不同的组中,其中一个将停止工作,另一个将得到修复。代码如下:

...
_image_library = {}
def get_image (path):
    global _image_library
    image = _image_library.get (path)
    if image == None:
        canonicalized_path = path.replace ("/", os.sep).replace ("\\", os.sep)
        image = pygame.image.load (canonicalized_path)
        _image_library [path] = image
    return image
...
score_rect_1 = pygame.Rect (680,540,42,57)
score_rect_2 = pygame.Rect (740,540,42,57)
...    
class Score_cards_1 (pygame.sprite.Sprite):
    def __init__ (self):
        pygame.sprite.Sprite.__init__ (self)
        self.images = []
        self.images.append (get_image ("number_0.1.png").convert_alpha())
        self.images.append (get_image ("number_1.1.png").convert_alpha())
        self.images.append (get_image ("number_2.1.png").convert_alpha())
        self.images.append (get_image ("number_3.1.png").convert_alpha())
        self.images.append (get_image ("number_4.1.png").convert_alpha())
        self.images.append (get_image ("number_5.1.png").convert_alpha())
        self.images.append (get_image ("number_6.1.png").convert_alpha())
        self.images.append (get_image ("number_7.1.png").convert_alpha())
        self.images.append (get_image ("number_8.1.png").convert_alpha())
        self.images.append (get_image ("number_9.1.png").convert_alpha())
        self.score = 0
        self.rect = score_rect_1

    def update (self):
        if pygame.sprite.groupcollide (player_bullet,flying_v,True,True):
            self.score += 1
        if self.score >= len (self.images):
            self.score = 0
        self.image = self.images [self.score]

class Score_cards_2 (pygame.sprite.Sprite):
    def __init__ (self):
        pygame.sprite.Sprite.__init__ (self)
        self.images = []
        self.images.append (get_image ("number_0.png").convert_alpha())
        self.images.append (get_image ("number_1.png").convert_alpha())
        self.images.append (get_image ("number_2.png").convert_alpha())
        self.images.append (get_image ("number_3.png").convert_alpha())
        self.images.append (get_image ("number_4.png").convert_alpha())
        self.images.append (get_image ("number_5.png").convert_alpha())
        self.images.append (get_image ("number_6.png").convert_alpha())
        self.images.append (get_image ("number_7.png").convert_alpha())
        self.images.append (get_image ("number_8.png").convert_alpha())
        self.images.append (get_image ("number_9.png").convert_alpha())
        self.score = 0
        self.rect = score_rect_2

    def update (self):
        if pygame.sprite.groupcollide (player_bullet, flying_v,True,True):
            self.score += 1
        if self.score >= len (self.images):
            self.score = 0
        self.image = self.images [self.score]
...

global score_cards
score_cards = pygame.sprite.Group ()
score_cards.add (Score_cards_1())
score_cards.add (Score_cards_2())

...

while not done:

    ...
    score_cards.update ()
    ...
    score_cards.draw ()
    ...

我知道分数没有被保存,但我想先让简单的部分开始工作。

如果要将类添加到组中,必须使用这些类创建对象,然后将它们添加到组中

score_card1_object = Score_Cards_1()
score_card2_object = Score_Cards_2()
score_cards = pygame.sprite.Group()
score_cards.add(score_card_object1)
score_cards.add(score_card_object2)