kokon Temat założony przez niniejszego użytkownika |
[SDL] Problem z przezroczystością » 2013-10-02 20:29:30 Witam, piszę grę poldegającą na tej samej zasadzie co cookie clicker w c++ z użyciem SDL. Jak na razie wszystko szło dobrze, lecz stanąłem na przezroczystości. SDL_SetColorKey zawiodło. Przeczytałem mnóstwo poradników (także wątków na tym forum), lecz nic innego działającego nie znalazłem. Jak inaczej sobie z tym poradzić? Oto kod z powierzchnią: #include <SDL\SDL.h> #include "SDL\SDL_image.h" #include <string>
SDL_Rect polozeniemuffinki; SDL_Rect wielkoscmuffinki; SDL_Surface * ekran = NULL; SDL_Surface * tlo = NULL; SDL_Surface * muffinduzy = NULL; SDL_Surface * muffinmaly = NULL;
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); ekran = SDL_SetVideoMode( 1280, 720, 32, SDL_SWSURFACE ); polozeniemuffinki.x = 0; polozeniemuffinki.y = 185; wielkoscmuffinki.w = 408; wielkoscmuffinki.h = 350; tlo = IMG_Load( "tlo.bmp" ); muffinduzy = IMG_Load( "muffin1.bmp" ); muffinmaly = IMG_Load( "muffin2.bmp" ); SDL_BlitSurface( tlo, NULL, ekran, NULL ); SDL_BlitSurface( muffinduzy, NULL, ekran, & polozeniemuffinki ); SDL_Flip( ekran ); SDL_FreeSurface( muffinduzy ); SDL_FreeSurface( muffinduzy ); SDL_Quit(); return 0; }
Screen: http://img545.imageshack.us/img545/7255/nt4a.png |
|
Mig |
» 2013-10-02 20:44:53 Jesteś pewny że dobrze stosowałeś SDL_SetColorKey ? tu masz przykładowy TUT -> http://lazyfoo.net/SDL_tutorials/lesson05/index.php |
|
kokon Temat założony przez niniejszego użytkownika |
» 2013-10-02 21:04:46 Ich przykład u mnie w ogóle nie działa, tzn. kompiluje się, ale otwierane okienko się zamyka bez wyświetlenia czegokolwiek. Możliwe, że mam po prostu złą wersję tej biblioteki i dlatego mam takie błędy? (Upewniłem się, że grafiki są na swoich miejscach przy uruchamianiu programu.) |
|
kokon Temat założony przez niniejszego użytkownika |
» 2013-10-03 22:30:19 Zmieniłem wersję SDL na 2.0 ale nadal mi nie działa nic. Przykład i alpha też. Dodam, że piszę program pod Code:blocks. |
|
domin568 |
» 2013-10-04 21:51:44 Nie lepiej ustawić przezroczystość w photoshopie , zapisać w png , otworzyć w programie jako png ( masz przezroczystosc bez zadnej programistycznej zabawy ) ?? |
|
kokon Temat założony przez niniejszego użytkownika |
» 2013-10-05 13:18:06 Ponieważ SDL nie obsługuje kanału alpha... |
|
DejaVu |
» 2013-10-08 23:00:39 W kodzie, który podałeś nie ma ani grama kodu, który wskazywałby na podjęcie próby wykonania przezroczystego koloru. /edit: Coś słabo szukałeś, zważywszy na fakt, że dałem gotowe rozwiązanie: http://cpp0x.pl/forum/temat/?id=3606&p=2#include <SDL/SDL.h> #include <windows.h>
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { SDL_Init( SDL_INIT_EVERYTHING ); SDL_Surface * ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE ); SDL_Surface * tapeta = SDL_LoadBMP( "tapeta.bmp" ); SDL_Surface * obraz = SDL_LoadBMP( "obraz.bmp" ); Uint32 col = SDL_MapRGB( obraz->format, 0x00, 0x00, 0x00 ); SDL_SetColorKey( obraz, SDL_SRCCOLORKEY | SDL_RLEACCEL, col ); SDL_BlitSurface( tapeta, NULL, ekran, NULL ); SDL_BlitSurface( obraz, NULL, ekran, NULL ); SDL_Flip( ekran ); SDL_Delay( 2000 ); SDL_Quit(); return 0; }
W powyższym kodzie przezroczystość u mnie działa.
/edit: A poniższy kod wycina dziurę w środku:
#include <SDL/SDL.h> #include <windows.h>
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { SDL_Init( SDL_INIT_EVERYTHING ); SDL_Surface * ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE ); SDL_Surface * tapeta = SDL_LoadBMP( "tapeta.bmp" ); SDL_Surface * obraz = SDL_LoadBMP( "obraz.bmp" ); Uint32 col = SDL_MapRGB( obraz->format, 0x00, 0x00, 0x00 ); { SDL_Rect r; r.x = obraz->w / 4; r.y = obraz->h / 4; r.w = obraz->w / 2; r.h = obraz->h / 2; SDL_FillRect( obraz, & r, col ); } SDL_SetColorKey( obraz, SDL_SRCCOLORKEY | SDL_RLEACCEL, col ); SDL_BlitSurface( tapeta, NULL, ekran, NULL ); SDL_BlitSurface( obraz, NULL, ekran, NULL ); SDL_Flip( ekran ); SDL_Delay( 2000 ); SDL_Quit(); return 0; }
|
|
|
kokon Temat założony przez niniejszego użytkownika |
» 2013-10-10 17:23:52 1 kod u mnie w ogóle nie działał, a kod jest tylko z powierzchnią, jak napisałem. Zresztą temat już trochę nie ważny bo zmieniłem bibliotekę na allegro 4.x. |
|
« 1 » 2 |