簡體   English   中英

pygame groupcollide不起作用

[英]Pygame groupcollide isn't working

我正在創建一個Space Invader副本,以練習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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM