pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
def Score_Change():
global Score
Score += 1
print(Score) #For testing purposes
这条线使两个碰撞的敌人消失。然而,最终的功能总是由于某种原因而开启,我希望它只在敌人碰撞时才会出现
答案 0 :(得分:2)
每次都行
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
执行,将调用Score_Change()
,此函数内的代码将被执行,其返回值(None
)将作为{{groupcollide
函数传递给collided
函数1}}论证。
请注意,最后一个参数需要一个函数来计算两个精灵是否发生碰撞。来自文档:
collided
参数是一个回调函数,用于计算两个精灵是否发生碰撞。它应该将两个精灵作为值并返回一个bool值,指示它们是否发生碰撞。如果未传递collided
,则所有精灵必须具有“rect”值,该值是精灵区域的矩形,将用于计算碰撞。
您通常会将pygame.sprite.collide_mask
或pygame.sprite.collide_circle
这样的函数作为此参数传递。
因此,如果发生碰撞,您似乎希望调用Score_Change
。事实并非如此。你能做的就是:
for k, v in pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True):
# k is the enemy
# v is a list of bullets that them
global Score
Score += 1
print(Score)
答案 1 :(得分:0)
groupcollide(group1,group2,dokill1,dokill2,collided = None) - > Sprite_dict
碰撞参数是一个用于计算两个的回调函数 精灵正在相撞。它应该将两个精灵作为值并返回 bool值,表示它们是否发生碰撞。如果碰撞不是 传递,然后所有精灵必须有一个“矩形”值,这是一个 精灵区域的矩形,将用于计算 碰撞。
正在调用您传递的函数Score_Change
以检查两个单元是否发生冲突。
groupcollide
返回已发生碰撞的元素字典。这可以帮助您通过检查有多少敌人发生碰撞来计算得分:
collisions = pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True)
increment_score(len(collisions))
def increment_score(amount = 1):
global Score
Score += amount
print(Score) #For testing purposes
PS:此功能无法处理碰撞的两个敌人的移除