2012-06-11 77 views
1

AFRP的整個主題聽起來非常令人興奮,我試圖在其中啓動我自己的項目。我發現Yampayampa-glut,這似乎是一個很好的綁定到GLUT(因爲它似乎,GLUT是在Windows和Linux上運行的唯一圖形庫)。使用Yampa和yampa-glut獲得重點輸入

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 

預期的結果是,每當我按下或釋放鍵外殼的簡單輸出。但它不會發生,沒有輸出。

如果我改變這個前的最後一行:

res <- delay 0.2 Nothing -< s 

然後我得到一些按鍵輸入,但不是所有的人,很多都跳過。

我找不到一些解釋,所以我希望有人能向我解釋我出錯的地方以及我能做些什麼來獲得鍵盤和鼠標按鈕輸入。

回答

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 

這似乎工作正常。 (將用上面的解決方案編輯)