我在使用OpenGl和Haskell編寫一個程序,該程序應該在單擊鼠標的時間和地點繪製一個矩形。但是,程序會在我點擊矩形之前立即關閉。Haskell圖形程序太早關閉
import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT
import Graphics.UI.GLUT.Callbacks.Window
main = do
(progname, _) <- getArgsAndInitialize
createWindow progname
keyboardMouseCallback $= Just myKeyboardMouseCallback
displayCallback $= display
mainLoop
myKeyboardMouseCallback key keyState modifiers (Position x y) =
case (key, keyState) of
(MouseButton LeftButton, Down) -> do
clear[ColorBuffer]
let x = x :: GLfloat
let y = y :: GLfloat
renderPrimitive Quads $ do
color $ (Color3 (1.0::GLfloat) 0 0)
vertex $ (Vertex3 (x::GLfloat) y 0)
vertex $ (Vertex3 (x::GLfloat) (y+0.2) 0)
vertex $ (Vertex3 ((x+0.2)::GLfloat) (y+0.2) 0)
vertex $ (Vertex3 ((x+0.2)::GLfloat) y 0)
flush
_ -> return()
display = do
clear [ColorBuffer]
renderPrimitive Lines $ do
flush
有什麼導致程序中的一種方法提前終止,或者這只是告訴我的電腦的方式,我不能這樣做呢?
之類的很有道理,但是當我去試試我的iorefs被淘汰的範圍,另一個是關於keyState ==追問下,即在按下錯誤。 – lewdsterthumbs 2012-04-17 19:09:46
我還沒有測試過這個代碼。我只是想給你一個總體思路。你必須導入'Data.IORef'和其他一些東西。我不會爲你做所有的工作。 – dflemstr 2012-04-17 20:26:05
我知道,但我仍然有一些相同的問題。 MouseStateRef實際上持有一對整數。我需要花車。 – lewdsterthumbs 2012-04-24 19:21:19