2016-04-12 2 views
2

Когда в моей игре сталкиваются два спрайта (игрок и «ключ»), я бы хотел, чтобы переменная счета увеличивалась на 100 пунктов. Я пробовал много методов, но все они делают то же самое; когда спрайт в контакте с ключом, переменные непрерывно увеличиваются. Мне нужно, чтобы он увеличивался один раз за столкновение. Это лишь один из способов, которые я попробовал:Создание функции оценки в pygame с коллизиями

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 

Я попытался сделать так, счет будет увеличиваться на 100, если переменная score_rect была правда, а затем сделать его значение False, не означает, что он больше не может увеличиваться. Я собирался сделать так, чтобы, когда спрайты не столкнулись, переменная снова вернулась к True, так что процесс повторяется. Тем не менее, он снова постоянно увеличивается, пока спрайты остаются в контакте. Я действительно застрял, и любая помощь приветствуется.

ответ

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 переменные. Поскольку они оба глобальны, это на самом деле не нужно.

+0

Это работает только с небольшим изменением отступа (который я редактировал) :) Спасибо, так много, я думал, что мне придется начинать все снова с моего проекта, который вы буквально сохранил половину моего уровня A, так как я не знал, что вы можете сразу вернуть две переменные, спасибо xD !! Цените помощь так много – gruntapocalypse

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 
+0

ли то же самое, как и раньше, только постоянно добавляет 100 :( – gruntapocalypse

+0

Хорошо, сделать что-то здесь: переместить объявление глобального can_increase из этой функции –

+0

никакой разницы, к сожалению – gruntapocalypse

Смежные вопросы