【问题标题】:Pygame update the score when enemies collidePygame 在敌人碰撞时更新分数
【发布时间】:2016-11-17 13:26:08
【问题描述】:
pygame.sprite.groupcollide(Enemy_List,Bullet_List,True,True,Score_Change())

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

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

【问题讨论】:

    标签: python python-2.7 class pygame


    【解决方案1】:

    每次这一行

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

    被执行,Score_Change() 将被调用,该函数内部的代码将被执行,其返回值(None)将作为collided 参数传递给groupcollide 函数。

    请注意,最后一个参数需要一个计算两个精灵是否碰撞的函数。来自文档:

    collided 参数是一个回调函数,用于计算两个精灵是否发生碰撞。它应该将两个精灵作为值并返回一个布尔值,指示它们是否正在碰撞。如果不传递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) 
    

    【讨论】:

      【解决方案2】:

      来自documentation

      groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict

      collided 参数是一个回调函数,用于计算是否有两个 精灵正在碰撞。它应该将两个精灵作为值并返回 一个布尔值,指示它们是否正在碰撞。如果碰撞不是 通过,那么所有精灵必须有一个“rect”值,这是一个 精灵区域的矩形,将用于计算 碰撞。

      正在调用您传递的函数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:这个函数不处理碰撞的两个敌人的移除

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2019-08-12
        • 1970-01-01
        • 2019-03-27
        相关资源
        最近更新 更多