求助关于pygame.event.clear的问题
本帖最后由 qq12346 于 2021-9-29 10:14 编辑想实现一个按键检测功能,代码如下:
def wait4keys(duration=1500):
left = (WIN_LENGTH / 4 - IMG_HEIGHT / 2, WIN_WIDTH / 2 - IMG_WIDTH / 2)
right = (3 * WIN_LENGTH / 4 - IMG_HEIGHT / 2, WIN_WIDTH / 2 - IMG_WIDTH / 2) # 左右两个刺激图片的位置
pygame.event.clear()
t_start = pygame.time.get_ticks()
while True:
t_now = pygame.time.get_ticks()
if t_now - t_start > duration: # 记录反应时
return 'BLANK'
else:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_LEFT:
choice = 'left'
pygame.draw.polygon(win, red, [eval(choice),
(eval(choice) + IMG_HEIGHT, eval(choice)), (
eval(choice) + IMG_HEIGHT,
eval(choice) + IMG_WIDTH),
(eval(choice), eval(choice) + IMG_WIDTH)], 10)
elif event.key == K_RIGHT:
choice = 'right'
pygame.draw.polygon(win, red, [eval(choice),
(eval(choice) + IMG_HEIGHT, eval(choice)), (
eval(choice) + IMG_HEIGHT,
eval(choice) + IMG_WIDTH),
(eval(choice), eval(choice) + IMG_WIDTH)], 10) # 显示选择结果
elif event.key in : # 快捷退出
resp = pygame.key.name(event.key)
pygame.event.clear()
return resp
else: # 按下其他键则忽视
continue
pygame.event.clear()
return choice
我需要做多次试验,每次调用这个函数去返回当前试验中按下的是左还是右。现在存在一个问题,当我按多次键后,它会在这一次试验中返回第一次按下的键,而按下的其他键会在后几次依次返回。这样会影响后面的记录。我只想返回当前试次中它第一次按下的键,将不小心按下的键清除掉。下一次重新开始记录。使用pygame.event.clear好像没有用。想请教一下应该怎么做? 设置布尔标识和根据时间间隔判断下 塔利班 发表于 2021-9-30 09:25
设置布尔标识和根据时间间隔判断下
您好,您的意思我没太明白。我的意思是,如果我连续按两次右,那么他会自动帮我把下一次选右,而不是等着下一次我按下之后选择的选项,按三次就会连续帮忙选出三个右。我的理解是它没有清空event造成的,但是我已经加了这么多个clear了,不知道为什么还是存在该现象。 qq12346 发表于 2021-9-30 09:51
您好,您的意思我没太明白。我的意思是,如果我连续按两次右,那么他会自动帮我把下一次选右,而不是等着 ...
做个按键的响应就行了,比如kflag=False时可以根据事件识别按键,每按键就让其置True,同时根据计数器来决定多少个interval来置False 塔利班 发表于 2021-9-30 10:12
做个按键的响应就行了,比如kflag=False时可以根据事件识别按键,每按键就让其置True,同时根据计数器来 ...
我按下第一个键就执行完就return了,下一次会重新调用这个函数,但是不知道为什么event队列没有清空,会自动做出下一次选择
页:
[1]