Я был не прав насчет проблемы.Обработчики событий работали нормально, и теперь все работает.Я нашел ответ на http://gloss.ouroborus.net/,, и соответствующий параграф цитируется ниже.Я прошу прощения за то, что задал вводящий в заблуждение вопрос.Я бы удалил вопрос, но не вижу способа сделать это.
из gloss.ouroborus.net:
В: На моем MacBook Pro под OSX программы глянца зависают после отображения первых нескольких кадров.О: Это может происходить в системах с двумя графическими процессорами, когда ОС переключается с интегрированного графического процессора (встроенного в процессор) на дискретный (отдельно от основного процессора).Программа глянца иногда может нарисовать несколько кадров перед застреванием, иначе она просто показывает черное окно.Это, вероятно, ошибка в OSX, которая неправильно переключает графический контекст.Обходной путь - отключить автоматическое переключение графического процессора в Системные настройки / Экономия энергии.
Оригинальный вопрос:
Я написал игру на Haskell Gloss, в которой используются обработчики щелчков мыши и клавиатуры.Он компилируется и прекрасно работает на ПК, но, в то время как он компилируется и загружается на Apple и представляет игровой экран, неправильно работают обработчики мыши и клавиатуры.Обработчик мыши распознает, что была нажата кнопка мыши, но сообщает ту же пару цифр для положения мыши, независимо от того, где находится мышь.Обработчик клавиатуры не работает для 's' и 'f', но клавиша escape работает.
Вот обработчики:
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.Блеск был установлен с помощью «cabal install gloss».
Любые предложения приветствуются.