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
每当我按下或释放一个键时,预期结果就是shell上的简单输出。但它没有发生,没有输出。
如果我将最后一行更改为:
res <- delay 0.2 Nothing -< s
然后我得到一些关键输入,但不是所有关键输入,很多都被跳过。
我无法找到解释,所以我希望有人可以向我解释我哪里出错,以及我可以做些什么来获得键盘和鼠标按键输入。
答案 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
这似乎工作正常。 (将使用以上解决方案进行编辑)