Я использую 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 в течение нескольких лет (все еще не большой, но довольно компетентный). Любая помощь очень ценится!
не 'KEYDOWN == K_w', но' even.key == K_w' - то же самое с 'KEYDOWN == K_a',' KEYDOWN == K_s' и т. Д. 'KEYDOWN' и' KEYUP' являются 'событием. type' – furas
, если у вас есть 'для события в pygame.event.get()' то вы не neen 'pygame.event.pump()' – furas
BTW: мы используем имена 'lower_case' для переменных, функций, экземпляров, т.е. , 'player_sprite' (или более короткий' игрок') 'player_step'. И 'CamelCase' называет только классы. Подробнее: [PEP 8 - Руководство по стилю для кода Python] (https://www.python.org/dev/peps/pep-0008/) – furas