【发布时间】:2018-09-30 09:04:35
【问题描述】:
系统:MacOS,安装了 sdl2 的 ghc。
如标题所述,如何通过 sdl2 创建逐渐褪色的图像? (请注意,该图由位于 PC 某处的 .bmp 文件给出。)
下面的代码我已经写好了。 myFaded 实际上是我需要的功能。不过目前haskell会抱怨没有setSurfaceAlphamod。
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Control.Concurrent (threadDelay)
import Foreign.C.Types
import SDL.Vect
import SDL.Raw.Video
import qualified SDL
screenWidth, screenHeight :: CInt
(screenWidth, screenHeight) = (960, 720)
fadedtime, fadednum :: Int
(fadedtime, fadednum) = (2000000, 10)
getDataFileName :: FilePath -> IO FilePath
getDataFileName = return
myFaded :: Int -> Int -> SDL.Surface -> SDL.Surface -> SDL.Window -> IO ()
myFaded fadedtime fadednum surface screenSurface window
| fadednum <= 0 = return ()
| otherwise = do
SDL.surfaceBlit surface Nothing screenSurface Nothing
SDL.updateWindowSurface window
threadDelay holdtime
newsurface <- SDL.setSurfaceAlphaMod surface alpha
myFaded (fadedtime - holdtime) (fadednum - 1) newsurface screenSurface window
where alpha = 2
holdtime = round $ fromIntegral $ fadedtime `div` fadednum
main :: IO ()
main = do
SDL.initialize [SDL.InitVideo]
window <- SDL.createWindow "our super mario" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }
SDL.showWindow window
screenSurface <- SDL.getWindowSurface window
helloWorld <- getDataFileName "figs/Entry.bmp" >>= SDL.loadBMP
--SDL.surfaceBlit helloWorld Nothing screenSurface Nothing
--SDL.updateWindowSurface window
myFaded fadedtime fadednum helloWorld screenSurface window
--SDL.updateWindowSurface window
--threadDelay 2000000
SDL.destroyWindow window
SDL.freeSurface helloWorld
SDL.quit
【问题讨论】: