鱼C论坛

 找回密码
 立即注册
查看: 2179|回复: 4

求助关于pygame.event.clear的问题

[复制链接]
发表于 2021-9-29 10:08:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq12346 于 2021-9-29 10:14 编辑

想实现一个按键检测功能,代码如下:
  1. def wait4keys(duration=1500):
  2.     left = (WIN_LENGTH / 4 - IMG_HEIGHT / 2, WIN_WIDTH / 2 - IMG_WIDTH / 2)
  3.     right = (3 * WIN_LENGTH / 4 - IMG_HEIGHT / 2, WIN_WIDTH / 2 - IMG_WIDTH / 2)                # 左右两个刺激图片的位置
  4.     pygame.event.clear()
  5.     t_start = pygame.time.get_ticks()       
  6.     while True:
  7.         t_now = pygame.time.get_ticks()
  8.         if t_now - t_start > duration:                # 记录反应时
  9.             return 'BLANK'
  10.         else:
  11.             for event in pygame.event.get():
  12.                 if event.type == KEYDOWN:

  13.                     if event.key == K_LEFT:
  14.                         choice = 'left'
  15.                         pygame.draw.polygon(win, red, [eval(choice),
  16.                                                        (eval(choice)[0] + IMG_HEIGHT, eval(choice)[1]), (
  17.                                                            eval(choice)[0] + IMG_HEIGHT,
  18.                                                            eval(choice)[1] + IMG_WIDTH),
  19.                                                        (eval(choice)[0], eval(choice)[1] + IMG_WIDTH)], 10)
  20.                     elif event.key == K_RIGHT:
  21.                         choice = 'right'
  22.                         pygame.draw.polygon(win, red, [eval(choice),
  23.                                                        (eval(choice)[0] + IMG_HEIGHT, eval(choice)[1]), (
  24.                                                            eval(choice)[0] + IMG_HEIGHT,
  25.                                                            eval(choice)[1] + IMG_WIDTH),
  26.                                                        (eval(choice)[0], eval(choice)[1] + IMG_WIDTH)], 10)                # 显示选择结果
  27.                        
  28.                     elif event.key in [K_ESCAPE]:                                # 快捷退出
  29.                         resp = pygame.key.name(event.key)
  30.                         pygame.event.clear()
  31.                         return resp
  32.                     else:                                                                # 按下其他键则忽视
  33.                         continue
  34.                     pygame.event.clear()
  35.                     return choice
复制代码

我需要做多次试验,每次调用这个函数去返回当前试验中按下的是左还是右。现在存在一个问题,当我按多次键后,它会在这一次试验中返回第一次按下的键,而按下的其他键会在后几次依次返回。这样会影响后面的记录。我只想返回当前试次中它第一次按下的键,将不小心按下的键清除掉。下一次重新开始记录。使用pygame.event.clear好像没有用。想请教一下应该怎么做?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-30 09:25:19 | 显示全部楼层
设置布尔标识和根据时间间隔判断下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-30 09:51:37 | 显示全部楼层
塔利班 发表于 2021-9-30 09:25
设置布尔标识和根据时间间隔判断下

您好,您的意思我没太明白。我的意思是,如果我连续按两次右,那么他会自动帮我把下一次选右,而不是等着下一次我按下之后选择的选项,按三次就会连续帮忙选出三个右。我的理解是它没有清空event造成的,但是我已经加了这么多个clear了,不知道为什么还是存在该现象。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-30 10:12:05 | 显示全部楼层
qq12346 发表于 2021-9-30 09:51
您好,您的意思我没太明白。我的意思是,如果我连续按两次右,那么他会自动帮我把下一次选右,而不是等着 ...

做个按键的响应就行了,比如kflag=False时可以根据事件识别按键,每按键就让其置True,同时根据计数器来决定多少个interval来置False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-30 13:45:24 | 显示全部楼层
塔利班 发表于 2021-9-30 10:12
做个按键的响应就行了,比如kflag=False时可以根据事件识别按键,每按键就让其置True,同时根据计数器来 ...

我按下第一个键就执行完就return了,下一次会重新调用这个函数,但是不知道为什么event队列没有清空,会自动做出下一次选择
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表