2012-06-19 4 views
4

전체 클릭 이벤트는 마우스 움직임이없는 상태에서 버튼을 누르고있는 것입니다. SDL은 버튼 업 및 다운 이벤트 만 제공합니다.리 액티브 바나나 및 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