Я создаю клон 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()
...
Я знаю, что счет не сохраняется или что-нибудь, но я хочу, чтобы получить простую часть работы первой.