当两个精灵在我的游戏中碰撞时(玩家和'键),我希望得分变量增加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,重复该过程。然而,在精灵保持联系的同时,它又一次不断增加。我真的卡住了,感谢任何帮助。
答案 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_score
和score_rect
个变量。既然它们都是全球性的,那就不是真的需要了。