最初に注意してください。問題が正確に何であるかがわからないため、この質問にタイトルを付ける方法がわかりません。
私は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 に渡したい型を示すために、コピーして変更handleKeyboard
しました。handleKeyboard2
私はモナドとHaskellにまだ慣れていないので、アドバイスをいただければ幸いです。私の質問が十分に明確でない場合はお知らせください。ありがとう!