haskell – 具有Reactive-banana和SDL的Full Click / KeyPress事件

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

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

顺便说一句,如果我想要一个“key not 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).

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

点赞