我在掩盖相同图像时遇到问题。
#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)
这当然不是我的全部代码,但是,我希望您明白我正在尝试做的事情。本质上,我试图循环创建一个特定的入侵者(是从太空入侵者那里获得的),但是,这些面具不是与其他入侵者一起创建的,还是没有移动。有人可以帮帮我吗? 谢谢。
答案 0 :(得分:2)
对您的问题的有意义的答案是立即停止您的工作,并开始将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)
,然后可以使用以下方法检查碰撞情况:
f <- function(x, ...) {
return(
as.list(substitute(list(...)))[-1]
)
}
err <- f(x = 0, y = 10,) #have a closer look --> str(err)
#$`y`
#[1] 10
#
#[[2]]
fine<- f(x = 0, y = 10)
#$`y`
#[1] 10