Pygame在敌人碰撞时更新得分

时间:2016-11-17 13:26:09

标签: python python-2.7 class pygame

pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())

def Score_Change():
    global Score
    Score += 1
    print(Score) #For testing purposes

这条线使两个碰撞的敌人消失。然而,最终的功能总是由于某种原因而开启,我希望它只在敌人碰撞时才会出现

2 个答案:

答案 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_maskpygame.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)

来自documentation

  

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:此功能无法处理碰撞的两个敌人的移除