据我所知,完整的单击事件是一个按钮向下和向上,没有鼠标移动。SDL 只给我 Button Up 和 Down 事件。
有什么reactive-banana
方法可以表达“先按下然后再按下”吗?
顺便说一句,如果我想要一个显示“key still down”的事件,我必须启用 SDL,enableKeyRepeat
以便再次触发 keyDown 事件。如何在 FRP 中正确表达?
据我所知,完整的单击事件是一个按钮向下和向上,没有鼠标移动。SDL 只给我 Button Up 和 Down 事件。
有什么reactive-banana
方法可以表达“先按下然后再按下”吗?
顺便说一句,如果我想要一个显示“key still down”的事件,我必须启用 SDL,enableKeyRepeat
以便再次触发 keyDown 事件。如何在 FRP 中正确表达?
我会尝试这样的事情:
定义一个效用函数(未经测试):
successive :: (a -> a -> Maybe b) -> Event t a -> Event t b
successive f e = filterJust (b <@> e)
where b = stepper (const Nothing) (f <$> e)
然后使用类似的东西
successive (\previous current -> if previous == buttonDown && current == buttonUp
then Just ()
else Nothing)
buttonEvents
(伪代码,因为我不熟悉 SDL)。
这应该有效,因为在事件触发后行为会部分更新。