【问题标题】:Key input code (pygame) not responding键输入代码(pygame)没有响应
【发布时间】:2017-06-22 15:22:34
【问题描述】:

我正在为我的 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 键并调用 Combat Mode 函数时没有任何反应。

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

【问题讨论】:

  • 不是KEYDOWN == K_w 而是even.key == K_w - 与KEYDOWN == K_aKEYDOWN == K_s 等相同。KEYDOWNKEYUPevent.type
  • 如果你有for event in pygame.event.get(),那么你就没有pygame.event.pump()
  • 顺便说一句:我们使用lower_case 变量、函数、实例的名称,即。 player_sprite(或更短的playerplayer_step。而CamelCase 名称仅适用于类。查看更多:PEP 8 -- Style Guide for Python Code
  • @furas 它是唯一让代码首先工作的东西。我试过没有 pygame.event.pump() 的代码,没有任何变化
  • 您的主要问题在于我的第一条评论-您以错误的方式使用KEYDOWN。看你的第一部分 - 你有event.key == K_s,但在第二部分你使用KEYDOWN == K_1,但正确的是event.key == K_1

标签: python pygame


【解决方案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)

但您需要将所有KEYDOWNs 替换为event.key 而且在第 27 行,event.key = KEYUP 也不起作用。刚开始时,您所做的所有event.keys 都是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 2021-10-10
    • 2017-05-10
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多