Проблемы с маской, кратной одному и тому же мобу в Pygame - PullRequest
0 голосов
/ 30 августа 2018

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

#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 (да, из космических захватчиков), однако маски либо не создаются с другими захватчиками, либо не перемещаются. Может кто-нибудь, пожалуйста, помогите мне? Спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

Осмысленный ответ на вашу проблему - прекратить то, что вы сейчас делаете, и начать использовать классы 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...