首先请注意,我不确定如何命名这个问题,因为我不知道到底是什么问题。
我一直在玩 Haskell+SDL 并且被卡住了。我的 GitHub 存储库在这里:https ://github.com/kennycason/haskell_boxxle/
在第 209 行有一行代码:
quit <- whileEvents $ modifyPlayerPos . handleKeyboard
它只能移动播放器,但我真的希望能够修改存储的其他内容GameData
,即存储在Room
(即boxes = [Coord]
)中的数据
我通过以下方式开始循环:
runLoop :: GameConfig -> GameData -> IO ()
runLoop = evalStateT . runReaderT loop
main = withInit [InitEverything] $ do -- withInit calls quit for us.
(gConf, gData) <- newGame 1
runLoop gConf gData
但是在我进入循环之后,我真的不知道如何gData
再次获得访问权限,或者即使我知道了,如何编写modify
函数,就像我为 GameData (modifyPlayerPos
等) 中的其他值所做的那样。
我复制并修改handleKeyboard
到handleKeyboard2
以演示我想要传递给 handleKeyboard 的类型。
我还是 Monads 和 Haskell 的新手,所以我很感激任何建议。如果我的问题不够清楚,请告诉我。谢谢!