Я довольно новичок в Haskell и пытаюсь создать небольшую игру в свободное время.
Этот урок отлично объясняет, как он работает, и я могуполучить все это работает гладко.Однако всякий раз, когда они заставляют вещи двигаться в этом примере, они манипулируют всем окном просмотра.
То, что я хочу для своей игры, - это изменение данных, отображаемых при нажатии клавиши.
Вместоэто:
main :: IO ()
main = do
(_progName, _args) <- getArgsAndInitialize
_window <- createWindow "Hello World"
displayCallback $= display
reshapeCallback $= Just reshape
keyboardMouseCallback $= Just keyboardMouse
mainLoop
Я пытался:
import Graphics.UI.GLUT
main :: IO ()
main = do
(_progName, _args) <- getArgsAndInitialize
_window <- createWindow "Hello World"
go [(1,1,1),(0.5,0.5,0.5)] -- Initial state
mainLoop
go points = do
displayCallback $= (display points) -- Parse points to draw lines between
keyboardMouseCallback $= Just keyboardMouse
return ()
where
keyboardMouse _key _state _modifiers _position = go ((0,0,0):points)
-- Defined here so I can reference 'go'
display :: [(GLfloat,GLfloat,GLfloat)] -> DisplayCallback
display points = do
clear [ColorBuffer]
renderPrimitive Lines $
mapM_ (\(x, y, z) -> vertex $ Vertex3 x y z) points
flush
Однако, он рисует только первую линию.Он не перерисовывается, когда я нажимаю клавишу.Итак, представьте, что я сопоставляю нажатую клавишу, и оттуда я определяю, какую точку добавить в список точек.Могу ли я заставить это работать здесь, я смогу реализовать его в своей игре.