我需要在bool上使用select()
,因为模块pygame.midi只会通过返回bool的函数Input.poll()
让你知道midi消息何时就绪。
如果我以简单的方式检查这个值,我会忙着等待,我的cpu一直在100%工作。
有没有办法使用select()
或类似的函数来等待变量在上下文中更改其值而不自动事件提升?
(我并不一定要活得无所事事,我确实很乐意使用它们,但我无法在套餐中的任何地方看到midi事件..)
答案 0 :(得分:2)
开发游戏时,您通常会在主循环中执行所有操作。如果你想要,例如50 fps,那么你想要每秒50x这个循环。如果你认为你没有做任何耗费时间,那么你可以在每次迭代结束时睡20ms。
所以我认为这就是为什么只有民意调查可用,你应该检查你的循环中是否加载了midi。如果是,那么你可以用它做一些事情,否则你会继续渲染或做其他事情。通常在创建应具有一致fps的游戏和应用程序时,您不希望等待某些事件。
答案 1 :(得分:0)
如果您的输入无法触发事件,则必须在计时器上进行检查。
在大多数游戏中,您的主事件循环已经有一些“帧限制器”代码,因此事件循环运行时间不超过50次/秒。因此,每个事件循环只需poll
一次。如果没有,你现在必须添加一个帧限制器。
如果你的游戏由于某种原因不符合这个范例 - 或者如果你需要比你的最大帧速率更频繁地轮询输入 - 你必须编写一个从输入中读取的后台线程(如果可能的话阻塞,如果没有则轮询和休眠)并直接处理事件,或者推送到主线程每次循环读取的队列。