2

AFRPのトピック全体は非常にエキサイティングに聞こえます。私はその中で自分のプロジェクトを始めようとしています。Yampayampa-glutを見つけました。これは、GLUTへの優れたバインディングのようです(GLUTは、WindowsとLinuxの両方で実行される唯一のグラフィックライブラリです)。

yampa-glutソースには、私がそれを研究するためにコピーした簡単な例が付属しています次に、それを拡張して、主要なイベントの簡単なテストを追加したいと思いました。その完全なソースはここにあります。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

次に、いくつかのキー入力を取得しますが、すべてではなく、多くがスキップされます。

これについての説明が見つからなかったので、どこが間違っていたのか、キーボードとマウスボタンの入力を取得するために何ができるのかを誰かに説明してもらいたいと思います。

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 に答える