Haskell SDL Binding: как сделать спрайты прозрачными?

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

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-Library я мог бы установить свойства ball примерно так:

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

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

... вот спрайт...

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

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

person martingw    schedule 04.09.2011    source источник


Ответы (1)


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

person Piotr Praszmo    schedule 04.09.2011
comment
Спасибо! Это сработало после добавления setColorKey и преобразования поверхности! - person martingw; 04.09.2011