使用Reactive-banana和SDL的完整Click / KeyPress事件

时间:2012-06-19 13:36:37

标签: haskell sdl reactive-banana

据我所知,完全点击事件是一个向下和向上的按钮,没有鼠标移动。 SDL只给我按钮向上和向下事件。

reactive-banana有没有办法表达“按键然后按键”?

顺便说一句,如果我想要一个“密钥仍然关闭”的事件,我必须启用SDL的enableKeyRepeat,以便再次触发keyDown事件。如何在FRP中正确表达?

1 个答案:

答案 0 :(得分:2)

我会尝试这样的事情:

定义效用函数(未经测试):

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)。

这应该有效,因为在事件触发后行为会略有更新。