Pygame在敌人碰撞时更新分数


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_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) 

来自文档:

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:这个函数不处理移除两个碰撞的敌人

最新更新