在 pygame 中创建带有碰撞的评分函数

Creating a score function in pygame with collisions

当两个精灵在我的游戏中发生碰撞时(玩家和 'key'),我希望 score 变量增加 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 以便重复该过程。然而,当精灵保持接触时,它再次不断增加。我真的被困住了,感谢任何帮助。

试一试:

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

您的代码存在问题,函数在 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

我在这里假设您想要 return key_scorescore_rect 变量。由于它们都是全球性的,因此并不是真正需要的。