pygam中相同同一暴徒的掩码倍数问题

2024-06-16 11:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

正如在标题中所讨论的,我在屏蔽相同的图像时遇到了问题

#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)

当然,这不是我的全部代码,但是,我希望您看到我正在尝试做什么。本质上,我试图循环创建一个特定的入侵者(是的,来自太空入侵者),然而,这些面具不是与其他入侵者一起创建的,就是没有移动。有人能帮我吗? 谢谢


Tags: imageloadmaskspacepygamescaleblitgamedisplay
1条回答
网友
1楼 · 发布于 2024-06-16 11:20:04

对于您的问题,有意义的答案是停止您现在正在做的事情,并开始将^{}^{}类与^{}函数一起使用

你不想为游戏中的每一个东西创建几个全局变量。您需要类的实例(通常使用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)

相关问题 更多 >