Haskell SDL Binding: как бликовать спрайты прозрачным цветом? - PullRequest
3 голосов
/ 04 сентября 2011

Я хочу перетаскивать спрайт на поверхность, используя привязку SDK к Haskell, но я не знаю, как определить прозрачный цвет на поверхности спрайта. Вот код на данный момент:

module Main where

import Graphics.UI.SDL as SDL
import Graphics.UI.SDL.Image as SDLi

main = do
    SDL.init [SDL.InitVideo]
    screen <- SDL.setVideoMode 500 500 32 []
    SDL.fillRect screen Nothing (SDL.Pixel 0x00FFFFFF) 

    ball <- SDLi.load "30ball.png"

    SDL.blitSurface ball Nothing screen Nothing

    SDL.flip screen

    delay 2000
    SDL.quit

В библиотеке Sdldotnet я мог бы установить свойства ball с чем-то вроде:

ball.Transparent<-true
ball.TransparentColor<-Color.FromArgb (0, 255, 0)

Любая идея, как я могу добиться того же в привязке SDK Haskell?

... here is the sprite...

Вот рабочая версия после реализации совета Бантара:

module Main where

import Graphics.UI.SDL as SDL
import Graphics.UI.SDL.Image as SDLi

main = do
    SDL.init [SDL.InitVideo]
    screen <- SDL.setVideoMode 500 500 32 []
    SDL.fillRect screen Nothing (SDL.Pixel 0x00FFFFFF) 

    ball <- SDLi.load "30ball.bmp"
    b2 <- convertSurface ball (surfaceGetPixelFormat screen) []

    t <- mapRGB (surfaceGetPixelFormat b2) 0 255 0 

    setColorKey b2 [SrcColorKey, RLEAccel] t 

    SDL.blitSurface b2 Nothing screen Nothing

    SDL.flip screen

    delay 2000
    SDL.quit

1 Ответ

3 голосов
/ 04 сентября 2011

Попробуйте setColorKey .Вы можете найти больше информации здесь .Если вы используете PNG, самый простой способ - использовать альфа-канал.

...