python - 等待鼠标点击被解除的方式?
问题描述
我正在尝试制作这样的按钮:
if button.collidepoint(mouse_pos) and mouse_down[0]==1:
toggle()
我遇到的问题是,由于我的鼠标单击持续时间,每帧都在来回切换。所以我尝试添加它,以便计算机等待鼠标被抬起。
While True:
if mouse_down[0]==0:
break
现在这是崩溃的pygame。谁能告诉我为什么?如果我添加它仍然会崩溃
pygame.time.delay(17)
最重要的是,如果有人能告诉我一种等待鼠标抬起的方法,那也将不胜感激。
解决方案
它“崩溃”是因为您不处理事件。请参阅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()
推荐阅读
- angular - 在 OpenLayers 6 和 Angular 9 中没有交互
- google-apps-script - 如果我的脚本有很多用户,我是否需要 LockService getScriptLock
- json - Flutter 中的 GET 请求
- flutter - 在构建期间更新值时使用 Flutter Provider 出现问题
- javascript - 节点js:fs WriteFile将数据写入文件两次
- sql-server - SSMS VS 计划作业中运行过程的 CPU 使用率
- redirect - 在 IIS 中从非 www 重定向到 www 和 http 到 https
- filepond - 将自定义 'li' 元素添加到 filepond 中的现有 ul 列表
- powerbi - 如何用单列PowerBI中的值和权重计算加权平均值
- reactjs - 使用 URL 对象进行 Jest 测试