正如标题中所讨论的,我遇到了掩盖相同图像的问题。
#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(是的,来自太空入侵者),但是,这些面具要么不是用其他入侵者创建的,要么是没有移动。有人可以帮帮我吗?谢谢。
你的问题的有意义的答案是停止你现在正在做的事情,并开始使用Sprite
和Group
类与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