absflg Temat założony przez niniejszego użytkownika |
[SDL] Przeźroczystość » 2011-01-25 21:20:27 Oto mój problem:
Zdefiniowałem funkcje odpowiedzialne za wczytanie (na potrzeby mapy w grze) zbioru cegiełek, z których stworzona jest grafika. Ustawiam na zbiorze kolor maskę przeźroczystości na kolor:
Uint32 colorMask = SDL_MapRGB( this->bmp->format, r, g, b ); SDL_SetColorKey( this->bmp, SDL_SRCCOLORKEY | SDL_RLEACCEL, colorMask );
Tu wszystko działa. Dalej tworzę klasę planszy gry: tło i maska na to. Przy składaniu planszy idzie kolejno: tło, później postacie i zdarzenia na mapie, na koniec maska (są na niej np. korony drzew zasłaniające postać). Tło zapełniam cegłami i nie ma tu żadnego problemu. Następnie zalewam maskę kolorem rgb(255,0,255), nakładam na nią cegły (w cegłach przeźroczystość działa). Na koniec chce ustawić w miejsce resztek koloru rgb(255,0,255) maskę przeźroczystości:
Uint32 col = SDL_MapRGB( this->mask->format, 0xff, 0x00, 0xff );
SDL_SetColorKey( this->mask, SDL_SRCCOLORKEY | SDL_RLEACCEL, col );
Niby to samo co wcześniej, ale nie działa. Po spłaszczeniu:
SDL_BlitSurface( this->back, NULL, screen, NULL ); SDL_BlitSurface( this->mask, NULL, screen, NULL );
Na ekran jest kopiowana warstwa tła, a następnie warstwa maski zalana zamiast przeźroczystością tym nieszczęsnym kolorem rgb(255,0,255). Co zrobić aby działała prawidłowo? |
|
DejaVu |
» 2011-01-25 21:39:22 |
|
absflg Temat założony przez niniejszego użytkownika |
» 2011-01-25 21:44:27 Nie rozwiązuje. Jak pisałem zrobiłem to dokładnie w ten sposób lecz tło nie zrobiło się przeźroczyste. |
|
Drraven |
» 2011-01-25 21:44:48 SDL ma coś takiego jak SDL_Image (obsługa innych formatów graficznych). W *.png da się ustawić alphe, Zainteresuj się tym. Color Keyobrazy png w sdlWtym drugim linku narpiew masz pokazane jak zainstalować tą bibliotekę do SDL'a. |
|
absflg Temat założony przez niniejszego użytkownika |
» 2011-01-25 21:46:49 Ale ja nie mam problemu z ustawieniem alfy na wczytanym obrazie z pliku, tylko na obrazie utworzonym w programie. |
|
DejaVu |
» 2011-01-25 21:54:16 Spróbuj nałożyć maskę na bitmapę, a nie na ekran i gotową bitmapę później przekopiuj na ekran - być może pomoże. Obecnie nie mam SDL'a skonfigurowanego więc nie za bardzo mam jak przetestować ten przypadek o którym mówisz. |
|
absflg Temat założony przez niniejszego użytkownika |
» 2011-01-25 22:02:30 Właśnie tak robię: - ładuję bitmapę - ustawiam przeźroczystość - pokrywam jej odpowiednimi elementami 2 SDL_Surface stworzone funkcją SDL_CreateRGBSurface - ustawiam przeźroczystość drugiej SDL_Surface - nakładam je kolejno na ekran
W efekcie uzyskuję całe okno pokryte drugą warstwą wraz z jej ustawionym kolorem (który powinien być przeźroczysty). |
|
DejaVu |
» 2011-01-25 22:17:40
A co robisz w tym fragmencie? Może zmieniasz wartość zmiennej col?
|
|
« 1 » 2 3 |