5

我错了问题是什么。事件处理程序运行良好,现在一切正常。我在http://gloss.ouroborus.net/上找到了答案,下面引用了相关段落。我很抱歉问了一个误导性的问题。我会删除这个问题,但我看不到这样做的方法。

来自gloss.ouroborus.net:

问:在我的 OSX 下的 MacBook Pro 上,光泽程序在显示前几帧后冻结。答:当操作系统从集成 GPU(烘焙到处理器中)切换到独立 GPU(与主处理器分离)时,这可能会在双 GPU 系统上发生。光泽程序有时会在卡住之前画几帧,否则它只会显示一个黑色窗口。这可能是 OSX 中的一个错误,无法正确切换图形上下文。解决方法是在系统偏好设置/节能器下禁用自动 GPU 切换。

原始问题:

我用 Haskell Gloss 写了一个游戏,它使用鼠标点击和键盘处理程序。它在 PC 上编译和运行良好,但是,当它在 Apple 上编译和加载并显示游戏屏幕时,鼠标和键盘处理程序出现故障。鼠标处理程序识别出鼠标按钮已被单击,但无论鼠标在哪里,都会报告相同的鼠标位置数字对。键盘处理程序不适用于“s”和“f”,但转义键确实有效。

以下是处理程序:

mousehandle::Event->(Board,Board)->IO(Board,Board)
mousehandle (EventKey (MouseButton LeftButton) Down _ pt@(x,y)) 
                        (board,solved) = 
                            return (board',solved)
                            where 
                                    board' = if candidates == [] then board 
                                                        else rotateCell board (fst (head candidates))
                                    candidates = getCandidates (x,y) board
mousehandle (EventKey (Char 's') Down _ _ ) (board1, board2) = return (board2, board1)
mousehandle (EventKey (Char 'f') Down _ _ ) (board1, board2) = do
                                    print "filename?"
                                    ans <- getLine 
                                    games2File [board1, board2]   ans
                                    return (board1, board2)
mousehandle (EventKey (SpecialKey KeyEsc) Down _ _) _ = exitSuccess                                        
mousehandle _ x = return x

我知道每次单击返回的鼠标位置坐标是什么,因为函数 getCandidates 中的跟踪将它们打印到控制台。

计算机是 Mac Book Pro。使用的 Haskell 是 GHC 7.6.3,作为完整 Haskell 平台的一部分安装。Gloss 是使用“cabal install gloss”安装的。

欢迎大家提出意见。

4

0 回答 0