2012-06-19 2 views
4

Полное нажатие кнопки - это кнопка вниз и вверх, без движения мыши, насколько я знаю. SDL дает мне только кнопки Up и Down.Событие Full Click/KeyPress с реактивным бананом и SDL

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

 Смежные вопросы

  • Нет связанных вопросов^_^