pygame的键盘输入功能不起作用

时间:2019-03-19 15:31:57

标签: python input keyboard pygame

我一直在寻找原因大约3个小时,但找不到任何解决方法。

没有错误,但是程序似乎无法检测到我的按键输入。 另外,我看不到代码有什么问题。

此外,我认为我不了解event.key和pygame.event.get()的运行方式。如果有人向我解释,我将不胜感激。

这是我的Ascii游戏中的代码,这只是我到目前为止所做的代码的开头。

    class maingame:

    def __init__(self):
        exit = False

    def processkey(self):
        global hotkey,crazy

        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == K_SPACE:
                    crazy = 1
                if event.key == K_DOWN:
                    dir = 's'
                    y_option -= 1
                    hotkey  = 2
                if event.key == pygame.K_w:
                    dir = 'w'
                    y_option += 1
                    hotkey = 1
                if event.key == K_LEFT:
                    dir = 'a'

                if event.key == K_RIGHT:
                    dir = 'd'
            else:
                    hotkey = 1
                    y_option = 0
                    crazy = 0

    def displaymanu(self,hotkey):
        print(">" if hotkey == 1 else " ","play")
        print(">" if hotkey == 2 else " ","quit")
        if hotkey == 1 and crazy == 1:
            self.play()     
        elif hotkey == 2 and crazy == 1:
            exit = True
if __name__ == '__main__':
        while not quit:
            displayee = maingame()
            os.system('cls')
            displayee.processkey()
            displayee.processkey()
            displayee.displaymanu(hotkey)

2 个答案:

答案 0 :(得分:1)

PyGame将not work without a screen/window。因此,您的代码需要首先初始化PyGame,然后打开一个窗口(或全屏显示)。

据我对您代码的理解,它似乎应该显示一个菜单:

Data Input 

data = '''\
id  A B
1   1 2
2   2 3 '''


import io
import pandas as pd

df = pd.read_csv(io.StringIO(data), sep='\s+')

在按 / (或 w / s )的位置移动> Play Quit 光标在选项之间,然后 space 运行该选项。

代码的问题之一是您试图解释>函数内部的按键。最好让函数执行单项操作,因此displaymanu()中的所有键处理和processkey()中的 only 屏幕绘图中的所有键处理。

我将您的代码修补到可以工作的地步。这涉及到修改类,以便初始化PyGame显示。该菜单需要显示在窗口中,因此添加了对新功能displaymanu()的调用来代替drawTextAt()。类print()的许多成员变量都存在范围问题,但只需指定Maingame变量名(使它们成为该类的成员)即可解决这些问题。

我还添加了一个游戏状态,以显示根据当前游戏所处的阶段需要更改按键处理的方式。它从菜单开始,在此菜单中,向上/向下仅更改菜单选项。但是随后在游戏过程中,向上/向下需要做一些完全不同的事情。

self.

答案 1 :(得分:0)

好像您没有将pygame.放在此处的某些变量之前:

if event.key == K_SPACE: # Does not have pygame prefix
    crazy = 1
if event.key == K_DOWN: # Does not have pygame prefix
    dir = 's'
    y_option -= 1
    hotkey  = 2
if event.key == pygame.K_w: # Does have pygame prefix
    dir = 'w'
    y_option += 1
    hotkey = 1
if event.key == K_LEFT: # Does not have pygame prefix
    dir = 'a'

if event.key == K_RIGHT: # Does not have pygame prefix
    dir = 'd'

在其中添加pygame.,之后应进行检测。但是奇怪的是,它在运行时没有产生NameError异常。