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
私はコードをテストしていません。私はあなたに一般的な考えを伝えたいと思っていました。あなたは 'Data.IORef'と他のものをインポートしなければなりません。私はあなたのためにすべての*仕事をしません。 – dflemstr
私は知っていますが、私はまだ同じ問題のいくつかを持っています。 MouseStateRefは実際にはintのペアを保持しています。私はフロートが必要です。 – lewdsterthumbs