在pygame中掩盖多个相同的相同暴徒的问题

问题描述 投票:0回答:1

正如标题中所讨论的,我遇到了掩盖相同图像的问题。

#initalising the masks
Invader1= pygame.image.load('Space_invaders_character_1_1.png').convert_alpha()

Invader1= pygame.transform.scale(Invader11, (40,30))

Invader1_mask = pygame.mask.from_surface(Invader11)
Invader1_mask= Invader11_mask.scale((70,40))

Invader2= pygame.image.load('Space_invaders_character_2_1.png').convert_alpha()
Invader2= pygame.transform.scale(Invader21, (40,30))
Invader2_mask = pygame.mask.from_surface(Invader21)
Invader2_mask= Invader11_mask.scale((70,40))
Invader3= pygame.image.load('Space_invaders_character_3_1.png').convert_alpha()
Invader3= pygame.transform.scale(Invader31, (40,30))
Invader3_mask = pygame.mask.from_surface(Invader31)
Invader3_mask= Invader11_mask.scale((70,40))


#drawing characters
def drawEnemies (invX,invY):
    for num in range (1,11):
        invX = invX + 50
        gameDisplay.blit(Invader32, (invX,invY))
        gameDisplay.blit(Invader32, (invX,invY-50))
        gameDisplay.blit(Invader22, (invX,invY-100))
        gameDisplay.blit(Invader22, (invX,invY-150))
        gameDisplay.blit(Invader12, (invX, invY -200))
while lives > 0:
    offset = (bulletX -invX, bulletY - invY)
    result = Invader11_mask.overlap(bullet_mask, offset)

当然这不是我的所有代码,但是,我希望你能看到我正在尝试做的事情。本质上,我试图循环创建一个特定的Invader(是的,来自太空入侵者),但是,这些面具要么不是用其他入侵者创建的,要么是没有移动。有人可以帮帮我吗?谢谢。

python pygame
1个回答
2
投票

你的问题的有意义的答案是停止你现在正在做的事情,并开始使用SpriteGroup类与collide_mask函数。

您不希望为游戏中的每个东西创建多个全局变量。你想要类的实例(你通常使用Sprite),并将它们添加到列表(通常是Group)。

所以,为你的入侵者创建一个继承自Sprite的类,给他们一个mask属性,类似这样:

class Invader(pygame.spriteSprite):
    def __init__(self, image, pos):
        super().__init__()
        self.image = image
        self.rect = image.get_rect(topleft=pos)
        self.mask = pygame.mask.from_surface(image)

    def update(self):
        pass # handle movement

为子弹创建一个Group,为入侵者创建一个pygame.sprite.groupcollide(bullets, invaders, True, True, pygame.sprite.collide_mask) ,然后你可以用以下方法检查碰撞:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.