使用碰撞在pygame中创建一个得分函数

时间:2016-04-12 10:48:22

标签: python function pygame sprite

当两个精灵在我的游戏中碰撞时(玩家和'键),我希望得分变量增加100点。我尝试了很多方法,但他们都做了同样的事情;当精灵在与键接触时,变量不断增加。我需要它每次碰撞增加一次。这只是我尝试过的方法之一:

def key_collect():
    global key_score
    global score_rect
    k_rect = pygame.draw.rect(SURF, (0,0,0), (k_spritex, k_spritey, 30, 40), 1)
    p_score_rect = pygame.draw.rect(SURF, (0,0,0), (p_spritex, p_spritey, 30, 40), 1)
    if p_score_rect.colliderect(k_rect):
        if score_rect == True:
            key_score = key_score + 100
            return key_score
            score_rect = False
            return score_rect

我尝试过这样,如果变量score_rect为True,则得分将增加100,然后将其设为False,这意味着它不能再增加。我打算这样做,以便当精灵没有碰撞时,变量再次变回True,重复该过程。然而,在精灵保持联系的同时,它又一次不断增加。我真的卡住了,感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试一下:

def key_collect():
    global key_score
    k_rect = pygame.draw.rect(SURF, (0,0,0), (k_spritex, k_spritey, 30, 40), 1)
    p_score_rect = pygame.draw.rect(SURF, (0,0,0), (p_spritex, p_spritey, 30, 40), 1)
    if p_score_rect.colliderect(k_rect):
        if can_increase == True:
            key_score = key_score + 100
            can_increase = False
            return key_score
    else:
         can_increase = True

答案 1 :(得分:0)

您的代码存在的问题是函数退出行return key_score并在此之后跳过两行。关键字return始终会在第一次遇到时终止您的功能。

您可以稍微更改一下代码:

def key_collect():
    global key_score
    global score_rect
    k_rect = pygame.draw.rect(SURF, (0,0,0), (k_spritex, k_spritey, 30, 40), 1)
    p_score_rect = pygame.draw.rect(SURF, (0,0,0), (p_spritex, p_spritey, 30, 40), 1)
    if p_score_rect.colliderect(k_rect):
        if score_rect == True:
            key_score = key_score + 100
            score_rect = False
            return key_score, score_rect
    else:
        score_rect = True
        return key_score, score_rect

我在此假设您要同时返回key_scorescore_rect个变量。既然它们都是全球性的,那就不是真的需要了。