如何检查多个精灵的碰撞,即具有多个可能目标的子弹

时间:2017-08-01 09:03:39

标签: python pygame

我试图在pygame中制作太空入侵者,作为我可以做到的概念证明,记住,我是初学者。 我有任何问题,我可以让我的子弹射击和移动但不检查它是否与另一个精灵(在这种情况下,入侵者)相撞。我可以让它检查与一个入侵者的碰撞,但我不想每个帧都检查每个入侵者的碰撞,所以我在尝试在互联网上研究之后将入侵者添加到列表但我现在卡住了,可能有些一个人帮帮我。

我尝试过只包含必要的代码,但如果需要更多代码,请发表评论。

invader_list = pygame.sprite.Group()
invader_list.add(invader1)
invader_list.add(invader2)
invader_list.add(invader3)
invader_list.add(invader4)
invader_list.add(invader5)
invader_list.add(invader21)
invader_list.add(invader23)
invader_list.add(invader24)
invader_list.add(invader25)
invader_list.add(invader31)
invader_list.add(invader32)
invader_list.add(invader33)
invader_list.add(invader34)
invader_list.add(invader35)
invader_list.add(invader41)
invader_list.add(invader42)
invader_list.add(invader43)
invader_list.add(invader44)
invader_list.add(invader45)
invader_list.add(invader51)
invader_list.add(invader52)
invader_list.add(invader53)
invader_list.add(invader54)
invader_list.add(invader55)

空间

if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    if bullet1 not in all_sprites_list:
                        bullet1.rect.y = Shooter.rect.y-25
                        bullet1.rect.x = Shooter.rect.x + 12
                        all_sprites_list.add(bullet1)
        bullet1.move()
        if bullet1.rect.y == 0:
            all_sprites_list.remove(bullet1)
            bullet1.rect.y = Shooter.rect.y

空间

class bullet(pygame.sprite.Sprite):
def __init__(self):
    super().__init__()
    self.image = pygame.image.load('Bullet.png')
    self.rect = self.image.get_rect()
    self.rect.x = Shooter.rect.x + 12
    self.rect.y = Shooter.rect.y
def move(self):
    self.rect.y -= 5

空间

class invader(pygame.sprite.Sprite):
def __init__(self,layer, position):
    super().__init__()

    self.image = pygame.image.load("Invader.jpg")
    self.rect = self.image.get_rect()
    c = 35
    y_start = 35        

    if layer == 1:
        self.rect.y = y_start
    elif layer == 2:
        self.rect.y = y_start + c
    elif layer == 3:
        self.rect.y = y_start + 2*c
    elif layer == 4:
        self.rect.y = y_start + 3*c
    elif layer == 5:
        self.rect.y = y_start + 4*c

    if position == 1:
        self.rect.x = 50
    elif position == 2:
        self.rect.x = 100
    elif position == 3:
        self.rect.x = 150
    elif position == 4:
        self.rect.x = 200
    elif position == 5:
        self.rect.x = 250
def moving(self):
    self.rect.x += 20
def moving1(self):
    self.rect.x -= 20

0 个答案:

没有答案