2017-02-05 3 views
0

Я использую python и модуль pygame для моего проекта уровня (создание очень простой, неровной игры - думаю, ранний покемон), и я использовал функцию event.type, это два дискретные части кода, полностью используя разные ключи. Первый раздел работает в основном разделе кода, а второй - внутри функции и не отображает никакого вывода.Код ввода ключа (pygame) не отвечает

Я попытался поместить обе части в одну из них в конце программы с разными условиями, чтобы сделать их истинными, но я ничего не работаю. Это в настоящее время введены в функцию:

#variable that causes Combat Mode, generates 'random encounter' 
PlayerStep = 5 

while True:#while the screen is up and the program is running 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN and PlayerSprite.canMove: 
      #actions based on which key is pressed 
      if event.key == K_w:#sprite moves up 
       PlayerSprite.moveup() 

      elif event.key == K_s:#sprite moves down 
       PlayerSprite.movedown() 

      elif event.key == K_a:#sprite moves right 
       PlayerSprite.moveright() 

      elif event.key == K_d:#sprite moves left - no diagonal movement 
       PlayerSprite.moveleft() 

      PlayerStep = PlayerStep - 1 
      pygame.event.pump() 
      print(KEYDOWN) 
      pygame.display.update() 

     if event.type == KEYDOWN and CombatMode() == True: 
      if KEYDOWN == K_w or KEYDOWN == K_a or KEYDOWN == K_s or KEYDOWN == K_d: 
        event.key = KEYUP #stops the WASD keys affecting the Combat Mode function 

       #use the number buttons to attack 
      if KEYDOWN == K_1:#'attack' option 
       ClearMsg() 
       TextBox("You attack!", (60, 50), 32) 
       MonsterHP = MonsterHP - 2 
       print(MonsterHP) 

      if KEYDOWN == K_2:#heal option 
       PlayerHP = PlayerHP + 10 
       print(PlayerHP) 

      if KEYDOWN == K_3:#'item's option 
       #add square to display list of items 
       BoxOption((255,250,191), (204,200,153), 150, 50, 400, 300, 4) 

      if KEYDOWN == K_4:#'flee' option - ends Combat Mode and returns to main screen 
       break 
       return 
      pygame.event.pump() 

    #gives Player warning when PlayerStep is low  
    if PlayerStep < 5 and PlayerStep != 0: 
     TextBox("Wait!", (255,50), 32) 
     pygame.event.pump() 
    elif PlayerStep <= 0:#causes Combat Mode when PlayerStep is 0 
     PlayerSprite.nomove() 
     Combat_Mode() 
    pygame.display.update() 

Для контекста, код разделен на две секции: Исследуйте режим и режим Combat. Режим исследования - основной экран игры, в которой спрайт перемещается, а боевой режим - пошаговая система боя: функция, вызываемая при выполнении условия.

Клавиши WASD все еще работают нормально, но ничего не происходит, когда нажаты клавиши 1234 и вызывается функция режима боя.

Я очень новичок в использовании pygame, но я использую python в течение нескольких лет (все еще не большой, но довольно компетентный). Любая помощь очень ценится!

+0

не 'KEYDOWN == K_w', но' even.key == K_w' - то же самое с 'KEYDOWN == K_a',' KEYDOWN == K_s' и т. Д. 'KEYDOWN' и' KEYUP' являются 'событием. type' – furas

+0

, если у вас есть 'для события в pygame.event.get()' то вы не neen 'pygame.event.pump()' – furas

+0

BTW: мы используем имена 'lower_case' для переменных, функций, экземпляров, т.е. , 'player_sprite' (или более короткий' игрок') 'player_step'. И 'CamelCase' называет только классы. Подробнее: [PEP 8 - Руководство по стилю для кода Python] (https://www.python.org/dev/peps/pep-0008/) – furas

ответ

0

Вы сделали:

print(KEYDOWN)  (Line 22) 
if KEYDOWN == K_w or KEYDOWN == K_a or KEYDOWN == K_s or KEYDOWN == K_d: (Line 26) 
if KEYDOWN == K_1: (Line 30) 
if KEYDOWN == K_2: (Line 36) 
if KEYDOWN == K_3: (Line 40) 
if KEYDOWN == K_4: (Line 44) 

но вам нужно заменить все эти KEYDOWN с с event.key , а также на линии 27, event.key = KEYUP не работает. Вблизи начала, все эти event.key вы сделали правильно.

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