2012-06-19 37 views
4

據我所知,一個完整的點擊事件是一個按鈕,並且沒有鼠標移動。 SDL僅向我提供Button Up和Down事件。帶反應香蕉和SDL的完全點擊/ KeyPress事件

請問reactive-banana有什麼方法可以表達「關鍵然後鍵入」?順便說一句,如果我想要一個事件說「鍵仍然關閉」,我必須啓用SDL的enableKeyRepeat,以便再次觸發keyDown事件。如何在FRP中正確表達?

回答

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

這應該起作用,因爲在事件發生後行爲會部分地更新。

+0

只有當這些事件相互正確時,它們纔會起作用,而不是介於兩者之間? – Lanbo

+0

是的。如果需要,可以使用'filterE'過濾掉不應該影響點擊檢測的事件。 – dave4420

+0

'previous'是在前一個事件中傳遞的值,'current'是在當前事件中傳遞的值。 – dave4420