鱼C论坛

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

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

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

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

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

x
本帖最后由 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)[0] + IMG_HEIGHT, eval(choice)[1]), (
                                                           eval(choice)[0] + IMG_HEIGHT,
                                                           eval(choice)[1] + IMG_WIDTH),
                                                       (eval(choice)[0], eval(choice)[1] + IMG_WIDTH)], 10)
                    elif event.key == K_RIGHT:
                        choice = 'right'
                        pygame.draw.polygon(win, red, [eval(choice),
                                                       (eval(choice)[0] + IMG_HEIGHT, eval(choice)[1]), (
                                                           eval(choice)[0] + IMG_HEIGHT,
                                                           eval(choice)[1] + IMG_WIDTH),
                                                       (eval(choice)[0], eval(choice)[1] + IMG_WIDTH)], 10)                # 显示选择结果
                        
                    elif event.key in [K_ESCAPE]:                                # 快捷退出
                        resp = pygame.key.name(event.key)
                        pygame.event.clear()
                        return resp
                    else:                                                                # 按下其他键则忽视
                        continue
                    pygame.event.clear()
                    return choice
我需要做多次试验,每次调用这个函数去返回当前试验中按下的是左还是右。现在存在一个问题,当我按多次键后,它会在这一次试验中返回第一次按下的键,而按下的其他键会在后几次依次返回。这样会影响后面的记录。我只想返回当前试次中它第一次按下的键,将不小心按下的键清除掉。下一次重新开始记录。使用pygame.event.clear好像没有用。想请教一下应该怎么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-30 09:25:19 | 显示全部楼层
设置布尔标识和根据时间间隔判断下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

做个按键的响应就行了,比如kflag=False时可以根据事件识别按键,每按键就让其置True,同时根据计数器来决定多少个interval来置False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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