2012-06-11 8 views
1

Вся тема AFRP звучит очень захватывающе, и я пытаюсь начать с нее собственный проект. Я нашел Yampa и yampa-glut, что кажется хорошим связыванием с GLUT (как кажется, GLUT - единственная графическая библиотека, которая работает как на Windows, так и на Linux).Получение ключевого ввода с помощью Ямпы и ямпа-перенасыщения

Источник yampa-glut поставляется с простым example, который я скопировал, чтобы изучить его. Затем я хотел расширить его, чтобы добавить простой тест для ключевых событий. Полный источник этого является here, нет ничего много нового для линии 23 и функциональные клавиши, кроме:

keys = proc ev -> do 
    rec 
     e <- keyAction -< ev 
     let s = event Nothing (Just . show) e 
     res <- identity -< s 
    returnA -< res 

Ожидаемый результат простой выход на раковине всякий раз, когда я нажатии или отпускании клавиши. Но этого не происходит, выхода нет.

Если изменить линию до последнего к этому:

res <- delay 0.2 Nothing -< s 

Тогда я получаю некоторые клавишного ввода, но не все из них, многие из них пропускаются.

Я не мог найти объяснения этого, поэтому я надеюсь, что кто-то может объяснить мне, где я поступил не так, и что я могу сделать, чтобы получить ввод клавиатуры и мыши.

ответ

1

По прошествии довольно долгого времени, я обнаружил, что думал совсем не так. Здесь будет продолжение вышеуказанного для тестирования нажатия кнопки «ESC»:

simple :: Reaction 
simple = proc ev -> do 
    r <- integral -< 50 
    displayAction <- arr (uncurry tag) <<< first redisplay -< (ev, actionIO . display $ r) 
    reshapedAction <- arr (fmap (actionIO . reshape)) <<< reshaped -< ev 
    returnA -< mconcat [reshapedAction, displayAction] 

anim :: Reaction 
anim = switch (simple &&& keyPressed) route 
    where 
     route (Left '\ESC') = arr (\_ -> Event actionExit) 
     route _ = simple 

Это похоже на работу. (Редактирует с решением выше)