Python pygame轮询键盘脱离主事件循环
我想知道如何在pygame中而不是在主事件循环中轮询键盘 我想这样做是因为我想能够从所有类中读取游戏中的事件(不仅仅是在主类中)。我试过了,但没用。我打字的时候它不打印字母 代码如下:Python pygame轮询键盘脱离主事件循环,python,events,keyboard,pygame,Python,Events,Keyboard,Pygame,我想知道如何在pygame中而不是在主事件循环中轮询键盘 我想这样做是因为我想能够从所有类中读取游戏中的事件(不仅仅是在主类中)。我试过了,但没用。我打字的时候它不打印字母 代码如下: 您的示例代码看起来不错,但在main循环中缺少调用dopygame.event.pump()。尝试添加这样的呼叫 另外,您的if pygame.event.poll()行不应该在for event循环中吗?按照编写方式,它只需检查最后一个可用事件是否为“键盘”类型 除此之外,没有什么可以阻止您在主循环中调用的任
您的示例代码看起来不错,但在main循环中缺少调用do
pygame.event.pump()
。尝试添加这样的呼叫
另外,您的if pygame.event.poll()
行不应该在for event
循环中吗?按照编写方式,它只需检查最后一个可用事件是否为“键盘”类型
除此之外,没有什么可以阻止您在主循环中调用的任何函数或方法中调用
pygame.event.poll
以从主循环代码中获取键盘事件(并且它本身有一个子循环)。for循环正在调用event.get(),这将清除事件队列。因此,在尝试event.poll()之后,您可能会得到一个NOEVENT,因为队列是空的。而event.poll()只会得到一个事件,我相信是队列中的第一个事件。因此,获取KEYDOWN事件的唯一方法是,它发生在for循环处理其他事件时,并且在KEYDOWN事件和调用event.get()之间没有发生其他事件
我不清楚为什么要避免事件循环,但为了得到想要的结果,我会将for循环更改为if语句检查pygame.event.get(pygame.QUIT)(您只需要知道是否有一个),并将if语句更改为pygame.event.get(pygame.KEYDOWN)(以防需要处理多个KEYDOWN)。然后添加一个pygame.event.pump()调用以清除队列中的任何其他事件。我尝试过,但它仅在我第一次调用它们时才识别出这些事件,因为poll会从队列中删除事件,因此如果您在删除事件后检查它们,并且在另一个问题中询问重用pygame事件时无法再次检查它们,我已经回答了-
import sys, pygame
from pygame.locals import *
class test():
pygame.init()
pygame.font.init()
screen=pygame.display.set_mode((768, 576))
pygame.display.set_caption("test")
clock = pygame.time.Clock()
while True:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if pygame.event.poll().type==pygame.KEYDOWN:
print "a"
screen.fill((0,0,0))
pygame.display.flip()