gpt4 book ai didi

haskell - Haskell 的 SDL 库中的操纵杆事件处理

转载 作者:行者123 更新时间:2023-12-01 05:13:53 25 4
gpt4 key购买 nike

我正在尝试编写一个小程序,使用 Haskell SDL 绑定(bind)检测视频游戏 Controller 上的按钮输入。我的程序相当简单:

import Control.Monad (forever, when)
import System.Exit (exitSuccess)
import Data.Time.Clock.POSIX (getPOSIXTime)

import qualified Graphics.UI.SDL.General as SG
import qualified Graphics.UI.SDL.Events as SE
import qualified Graphics.UI.SDL.Joystick as SJ
import qualified Graphics.UI.SDL.Video as SV
import qualified Graphics.UI.SDL.Types as ST


main :: IO ()
main =
SG.withInit [SG.InitVideo, SG.InitJoystick] $ do
-- Open joystick. We assume it's always present.
numJoysticks <- SJ.countAvailable
putStrLn $ show numJoysticks ++ " joystick(s) available"
js <- SJ.open 0

-- Create window
SV.setVideoMode 320 240 24 [ST.SWSurface, ST.Resizable]

-- Handle events
forever $ do
evt <- SE.waitEvent
case evt of
SE.JoyButtonDown dev btn -> do
t <- getPOSIXTime
print (show t ++ " - Button pressed: " ++ show dev ++ " " ++ show btn)
SE.Quit -> exitSuccess
_ -> return ()

在我的系统(Debian stable,GHC 7.4,libghc-sdl-dev 0.6.3)上,按钮事件在程序执行的第一秒(或多或少)期间被捕获,然后什么也没有。我的代码有问题吗?

最佳答案

添加 SJ.close js在您的 forever 之后堵塞。我相信当 Haskell 认为不再需要操纵杆时,它会自动关闭。

关于haskell - Haskell 的 SDL 库中的操纵杆事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com