键输入代码(pygame)没有响应

时间:2017-02-05 17:22:44

标签: python pygame

我正在为我的A Level项目使用python和pygame模块(创建一个非常基本的,像素化的游戏 - 想想早期的口袋妖怪)并且我使用了event.type函数是代码的两个谨慎部分,使用不同的钥匙完全。第一部分在代码的主要部分工作,但第二部分在函数内,不显示任何输出。

我尝试在程序结束时将两个部分放在一个不同的条件下,以使它们成为现实,但我做的任何事情似乎都无效。它目前已投入使用:

#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()

对于上下文,代码分为两部分:探索模式和战斗模式。探索模式是精灵四处移动的游戏的主屏幕,战斗模式是回合制战斗系统:在满足条件时调用的功能。

WASD键仍能正常工作,但按下1234键并调用战斗模式功能时没有任何反应。

我对使用pygame很新,但我已经使用python几年了(仍然不是很好,但相当称职)。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

你做了:

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都是正确的。