Как спрятать курсор мыши в Haskell Gloss - PullRequest
0 голосов
/ 23 октября 2018

Можно ли скрыть курсор с помощью Gloss в Haskell?Мы хотим заменить игрока с позицией мыши.

1 Ответ

0 голосов
/ 06 декабря 2018

Эта функциональность не отображается глянцем: было бы легче достичь, если бы были выставлены модули Internal (например, с помощью playWithBackendIO и некоторых пользовательских экземпляров Backend чтобы скрыть курсор).Если вы действительно хотите эту функциональность, было бы * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *


.любая из ...IO функций, мы можем выполнять произвольные IO действия внутри функций, которые мы передаем, что позволяет нам изменять состояние бэкэнда.

Я собираюсь использовать здесь displayIOдля простоты, но это работает для любого из режимов, таких как playIO и т. д.

import Prelude hiding (init)
import Control.Monad
import Data.IORef
import Data.StateVar
import Graphics.Gloss
import Graphics.Gloss.Interface.IO.Display
import qualified Graphics.UI.GLUT.Window as Glut

init :: IO ()
init = Glut.cursor $= Glut.None

render :: IORef Bool -> IO Picture
render doneInit = do
    needsInit <- not <$> readIORef doneInit
    when needsInit $ do
        init
        writeIORef doneInit True
    return $ color white $ circle 30

controllerCallback :: Controller -> IO ()
controllerCallback _ = return ()

main :: IO ()
main = do
    let disp = InWindow "test" (800, 600) (0, 0)
    initVar <- newIORef False
    displayIO disp black (render initVar) controllerCallback

Жизненно важным элементом является Glut.cursor $= Glut.None, который устанавливает значение GLUT cursor, используя StateVar's $= функция и автоматически обновляет контекст перенасыщения.Мы хотим запустить его только один раз, поэтому мы используем IORef, чтобы отслеживать, запускали ли мы его раньше.

Наконец, это не работает для бэкэнда GLFW.gloss использует очень старую версию GLFW-b, которая не поддерживает ничего общего с режимами курсора . Более современные версии делают , но я не смог найти способ получить экземпляр Window, так как Gloss просто отбрасывает его.

...