获得Yampa和yampa-glut的关键输入

时间:2012-06-11 13:35:59

标签: haskell glut freeglut yampa

AFRP的整个主题听起来非常令人兴奋,我正试图在其中开始我自己的项目。我找到了Yampayampa-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

每当我按下或释放一个键时,预期结果就是shell上的简单输出。但它没有发生,没有输出。

如果我将最后一行更改为:

res <- delay 0.2 Nothing -< s

然后我得到一些关键输入,但不是所有关键输入,很多都被跳过。

我无法找到解释,所以我希望有人可以向我解释我哪里出错,以及我可以做些什么来获得键盘和鼠标按键输入。

1 个答案:

答案 0 :(得分: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

这似乎工作正常。 (将使用以上解决方案进行编辑)