Проблема добавления взрывов к космическим захватчикам

#python #animation #pygame

#питон #Анимация #pygame

Вопрос:

Привет, я новичок в python и в качестве своего первого проекта решил сделать игру space invaders, поэтому моя проблема в том, что для каждой колонки инопланетян я сбиваю взрывы, чтобы эта колонка появлялась в одном и том же определенном месте.

Например, взрывы для крайнего левого столбца отображаются в левом верхнем углу экрана, и при переходе к столбцам справа взрывы уменьшаются настолько, что анимация взрыва для крайнего правого столбца отображается в правом нижнем углу экрана.

Я включу код для класса Explosions, который я создал, и часть файла функций, в которой, как мне кажется, я написал код, вызывающий эту проблему.

класс взрывов:

 import pygame   pygame.init()  clock = pygame.time.Clock() fps = 60   class Explosion(pygame.sprite.Sprite):  def __init__(self, x, y, size):  pygame.sprite.Sprite.__init__(self)  self.images = []  for num in range(1, 6):  img = pygame.image.load(f"images/exp{num}.png")  if size == 1:  img = pygame.transform.scale(img, (20, 20))  if size == 2:  img = pygame.transform.scale(img, (40, 40))  if size == 3:  img = pygame.transform.scale(img, (160, 160))  # add the image to the list  self.images.append(img)  self.index = 0  self.image = self.images[self.index]  self.rect = self.image.get_rect()  self.rect.center = [x, y]  self.counter = 0   def update(self):  explosion_speed = 4  # Update explosion animation.  self.counter  = 1   if self.counter gt;= explosion_speed and self.index lt; len(self.images) - 1:  self.counter = 0  self.index  = 1  self.image = self.images[self.index]   # If the animation is complete, delete explosion.  if self.index gt;= len(self.images) - 1 and self.counter gt;= explosion_speed:  self.kill()   

возможный проблемный раздел:

 def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens,  bullets, ai_sounds, explosions):  """Respond to bullet_alien collisions."""  # Remove the bullets that have collided.  collisions = pygame.sprite.groupcollide(aliens, bullets, True, True)  for alienn in collisions:  explosion = Explosion(alienn.rect.centerx, alienn.rect.centerx, 2)  explosions.add(explosion)   if collisions:  for alienss in collisions.values():  stats.score  = ai_settings.alien_points * len(alienss)  ai_sounds.play_alien_explosion_sound()  sb.prep_score()  check_high_score(stats, sb)  if len(aliens) == 0:  start_new_level(ai_settings, screen, stats, sb, ship, aliens, bullets)   

Комментарии:

1. Это опечатка. Вы переходите alienn.rect.centerx к Explosion двум. Это должно быть Explosion(alienn.rect.centerx, alienn.rect.centery, 2) или Explosion(*alienn.rect.center, 2) вместо Explosion(alienn.rect.centerx, alienn.rect.centerx, 2)

2. @Rabbid76 — Спасибо, чувак, ты буквально сделал мой день, очень ценю это.

Ответ №1:

В вашем заявлении есть опечатка. Вы переходите alienn.rect.centerx к Explosion двум. Это должно быть Explosion(alienn.rect.centerx, alienn.rect.centery, 2) или Explosion(*alienn.rect.center, 2) вместо Explosion(alienn.rect.centerx, alienn.rect.centerx, 2) этого .