首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测用户是否在pygame中双击?

如何检测用户是否在pygame中双击?
EN

Stack Overflow用户
提问于 2012-03-29 11:45:15
回答 5查看 5.7K关注 0票数 7

我知道我可以检查有没有左键点击

代码语言:javascript
运行
复制
event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT

但是我怎么检查他们是否双击了呢?另外,有没有办法检查用户是否向前或向后移动滚轮?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-29 12:05:08

我从未使用过pygame -但是:

  • Detecting双击:在猜测,而不是立即处理每个点击,应用50ms的延迟,看看你是否在这段时间内得到另一个点击事件。用户可能不会注意到上下滚轮之间的50ms delay.
  • Distinguishing:查看this documentation page.上的评论显然定义了五个按钮-左、中、右、上滚轮和下滚轮。也就是说,你可以像捕捉左键点击一样捕捉滚轮事件--你只需要寻找SCROLL_UP或类似的东西,而不是LEFT

请查阅文档,了解SCROLL_UP的确切名称。

票数 4
EN

Stack Overflow用户

发布于 2017-03-09 18:02:16

我只是使用clock.tick返回的增量时间值来增加计时器。在本例中,您有0.5秒的时间双击,否则将重置计时器。

代码语言:javascript
运行
复制
import sys
import pygame as pg


pg.init()

screen = pg.display.set_mode((640, 480))
BLACK = pg.Color('black')
FONT = pg.font.Font(None, 32)


def game():
    clock = pg.time.Clock()
    timer = 0
    dt = 0
    running = True

    while running:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                running = False
            if event.type == pg.MOUSEBUTTONDOWN:
                if event.button == 1:
                    if timer == 0:  # First mouse click.
                        timer = 0.001  # Start the timer.
                    # Click again before 0.5 seconds to double click.
                    elif timer < 0.5:
                        print('double click')
                        timer = 0

        # Increase timer after mouse was pressed the first time.
        if timer != 0:
            timer += dt
            # Reset after 0.5 seconds.
            if timer >= 0.5:
                print('too late')
                timer = 0

        screen.fill(BLACK)
        txt = FONT.render(str(round(timer, 2)), True, (180, 190, 40))
        screen.blit(txt, (40, 40))
        pg.display.flip()
        # dt == time in seconds since last tick.
        # / 1000 to convert milliseconds to seconds.
        dt = clock.tick(30) / 1000


if __name__ == '__main__':
    game()
    pg.quit()
    sys.exit()
票数 12
EN

Stack Overflow用户

发布于 2016-03-29 02:46:33

在第一次按下鼠标时设置计时器,将用户事件放到pygame事件队列中,并将变量设置为1以指示单击。当第二次单击发生时,检查变量并将timer事件对象设置为off。检查userevent是否出现在队列中,因为这意味着计时器已超时。有关更多信息,请参阅这个漂亮的答案:Move an object every few seconds in Pygame

以下是代码,将double_click()调用替换为您自己的函数调用:

代码语言:javascript
运行
复制
def run():

    global clock, double_click_event, timer
    double_click_event = pygame.USEREVENT + 1
    timer = 0

    while True:
        clock.tick(60)
        check_events()
        frame.update()
        screen.blit(frame, (0,0))
        pygame.display.flip()   


def check_events():
    global dispatcher, double_click_event, timer

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            if timer == 0:
                pygame.time.set_timer(double_click_event, 500)
                timerset = True
            else:
                if timer == 1:
                    pygame.time.set_timer(double_click_event, 0)
                    double_click()
                    timerset =False

            if timerset:
                timer = 1
                return
            else: 
                timer = 0
                return

        elif event.type == double_click_event:
            # timer timed out
            pygame.time.set_timer(double_click_event, 0)
            timer = 0
            print "evt = dble click"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9918808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档