pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
def Score_Change():
global Score
Score += 1
print(Score) #For testing purposes
这条线使两个碰撞的敌人消失。然而,由于某些原因,最后的函数总是打开,我希望它只在敌人碰撞时才打开
每行
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
被执行,Score_Change()
将被调用,该函数内部的代码将被执行,其返回值(None
)将作为collided
参数传递给groupcollide
函数。
注意,最后一个参数需要一个函数来计算两个精灵是否碰撞。来自文档:
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)
来自文档:
groupcollision (group1, group2, dokill1, dokill2, collisions = None) ->Sprite_dict
参数collision是一个回调函数,用于计算if = 2精灵在碰撞。它应该将两个精灵作为值并返回一个bool值,指示它们是否发生碰撞。如果碰撞不是通过后,所有精灵必须有一个"rect"值,即a矩形的精灵区域,它将被用来计算碰撞。
你传递给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:这个函数不处理移除两个碰撞的敌人