2016-02-14 2 views
0

Я создаю клон Space Invader, чтобы практиковать программирование python и pygame. Я использую pygame.sprite.groupcollide, чтобы проверить наличие столкновений между пулями игрока и врагами, который работает нормально. Тем не менее, я попытался использовать этот тип проверки столкновения, чтобы увеличить счет игрока после того, как пуля уничтожила врага. Итак, я создал два класса баллов со своими собственными изображениями, которые меняются после того, как пуля попадает в противника, чтобы вести счет. Однако, хотя оба класса почти идентичны, проверка на столкновение работает нормально, а другая - нет. Самый сбивающий с толку факт состоит в том, что если я изменю порядок, я добавлю их в группу или разные группы, один перестанет работать, а другой будет исправлен. Вот код:Pygame 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() 
    ... 

Я знаю, что счет не сохраняется или что-нибудь, но я хочу, чтобы получить простую часть работы первой.

ответ

0

вы пытаетесь добавить классы в группу, вы должны создавать объекты с этими классами, а затем добавить их в группу

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)