4

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

有什么reactive-banana方法可以表达“先按下然后再按下”吗?

顺便说一句,如果我想要一个显示“key still down”的事件,我必须启用 SDL,enableKeyRepeat以便再次触发 keyDown 事件。如何在 FRP 中正确表达?

4

1 回答 1

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

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

于 2012-06-19T14:12:46.570 回答