2016-05-31 2 views
0

Я пытаюсь создать игру, подобную геометрической тире в pygame. У меня есть все, кроме прыгающей части. Мне это нужно, так что, когда персонаж находится на квадратном блоке, он может вскочить, но не может дважды прыгать в воздухе. Прямо сейчас у меня это так, что персонаж может прыгать на землю, но как только персонаж касается прыжков на множестве блоков, он начинает отскакивать вверх и вниз и не может прыгать, пока он скользит по блокам. Может ли кто-нибудь помочь?Прыжки в Pygame

onblock = False 
for i in squares_list: 
     if player_rect.bottom <= 560 and player_rect.colliderect(i): 
      onblock = True 
      player_rect.bottom = i.top + 1 
     if player_rect.collidepoint((i.topleft[0], i.topleft[1]+1)): 
      print ('Game Over') 
    if event.type == KEYDOWN:  # if space is pressed the character jumps 
      if event.key == K_SPACE: 
       print(onblock) 
       if onblock or player_rect.bottom == screen.get_rect().bottom : # prevents double jumps 
        vel_y = -20 # Makes the character jump up 
        player_rect.y -= 1 
    if onblock: 
     gravity = 0 
     vel_y = 0 
     current_angle = 0 
    else: 
     gravity = 1 
     vel_y += gravity 

    onblock = False 
+0

после прыжка может быть установлен на блокировку True? как в строке после 'player_rect.y - = 1' –

ответ

0

Я не знаю, если вы отступы не так просто в этом посте или в игре, но в соответствии с этой должностью, onblock всегда будет Ложным после каждого цикла. Это может быть проблемой.

Другой возможной проблемой может быть то, что вы размещаете свой персонаж на 1 пиксель над платформой, когда происходит столкновение. Это означает, что при следующем проверке на столкновение персонаж не будет опираться на блок, и поэтому он будет False.

Первую проблему легко устранить, удалив последнюю строку onblocks = False. Вторая проблема может быть исправлена ​​с помощью player_rect.bottom = i.top без +1.

Смотрите этот talk для получения дополнительной информации, особенно около this timestamp.

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