每次这一行
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())
被执行,Score_Change() 将被调用,该函数内部的代码将被执行,其返回值(None)将作为collided 参数传递给groupcollide 函数。
请注意,最后一个参数需要一个计算两个精灵是否碰撞的函数。来自文档:
collided 参数是一个回调函数,用于计算两个精灵是否发生碰撞。它应该将两个精灵作为值并返回一个布尔值,指示它们是否正在碰撞。如果不传递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)