2012-06-11 2 views
1

Le sujet entier de AFRP semble très excitant, et j'essaie de lancer mon propre projet. J'ai trouvé Yampa et yampa-glut, ce qui semble être une bonne liaison à GLUT (Comme il semble, GLUT est la seule bibliothèque graphique qui fonctionne sur les deux, Windows et Linux).Obtenir une entrée clé avec Yampa et yampa-glut

La source yampa-glut est livrée avec un simple example, que j'ai copié pour l'étudier. Ensuite, je voulais l'étendre, pour ajouter un test simple pour les événements clés. La source complète de celui-ci est here, il n'y a rien de bien nouveau, sauf pour la ligne 23 et la fonction clés:

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

Le résultat attendu est une sortie simple sur la coquille chaque fois que je presse ou communiqué une clé. Mais ça n'arrive pas, il n'y a pas de sortie.

Si je change la ligne avant la dernière à ceci:

res <- delay 0.2 Nothing -< s 

Puis-je obtenir une entrée clé, mais pas tous, beaucoup sont ignorés.

Je n'ai pas trouvé d'explication à ce sujet, alors j'espère que quelqu'un pourra m'expliquer où je me suis trompé et ce que je peux faire pour obtenir une entrée au clavier et à la souris.

Répondre

1

Après un certain temps maintenant, j'ai trouvé que je pensais entièrement dans le mauvais sens. Ici serait une extension de ce qui précède pour tester pour appuyer sur le bouton "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 

Cela semble fonctionner correctement. (Éditera avec la solution pour ce qui précède)

Questions connexes