2

AFRP 的整个主题听起来非常令人兴奋,我正在尝试在其中开始我自己的项目。我找到了Yampayampa-glut,这似乎是与 GLUT 的良好绑定(看起来,GLUT是唯一同时在 Windows 和 Linux 上运行的图形库)。

yampa-glut源码附带了一个简单的例子我复制过来学习了。然后我想扩展它,为关键事件添加一个简单的测试。它的完整来源在这里,除了第 23 行和 keys 函数外,没有什么新东西:

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

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

我找不到对此的解释,所以我希望有人能向我解释我哪里出错了,我可以做些什么来获得键盘和鼠标按钮输入。

4

1 回答 1

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

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

于 2012-07-11T13:55:54.953 回答