首页 > 解决方案 > 等待鼠标点击被解除的方式?

问题描述

我正在尝试制作这样的按钮:

if button.collidepoint(mouse_pos) and mouse_down[0]==1:
    toggle()

我遇到的问题是,由于我的鼠标单击持续时间,每帧都在来回切换。所以我尝试添加它,以便计算机等待鼠标被抬起。

While True:
    if mouse_down[0]==0:
        break

现在这是崩溃的pygame。谁能告诉我为什么?如果我添加它仍然会崩溃

pygame.time.delay(17)

最重要的是,如果有人能告诉我一种等待鼠标抬起的方法,那也将不胜感激。

标签: pythonpygameclick

解决方案


它“崩溃”是因为您不处理事件。请参阅PyGame 无响应显示PyGame 窗口在几秒钟后没有响应
您必须处理应用程序循环中的事件。pygame.event.get()分别见pygame.event.pump()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保您的程序可以在内部与操作系统的其余部分进行交互。

如果你想等待鼠标被点击,你必须处理循环中的事件。

无论如何,如果您只想在单击鼠标按钮后切换一次,则需要使用鼠标事件。MOUSEBUTTONDOWN单击鼠标按钮时该事件MOUSEBUTTONUP发生一次,释放鼠标按钮时该事件发生一次。该pygame.event.Event()对象有两个属性,提供有关鼠标事件的信息。pos是一个存储被点击位置的元组。button存储被点击的按钮。每个鼠标按钮都关联一个值。例如,鼠标左键、鼠标中键、鼠标右键、鼠标滚轮向上和鼠标滚轮向下的属性值为 1、2、3、4、5。当按下多个键时,会发生多个鼠标按钮事件。进一步的解释可以在模块的文档中找到pygame.event

例如:

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.MOUSEBUTTONDOWN:
            if button.collidepoint(event.pos) and event.button == 1:
                toggle()

另见Pygame 鼠标点击检测


推荐阅读