skovv Temat założony przez niniejszego użytkownika |
[SDL, C++] Program nie wyświetla bitmapy » 2010-07-03 21:10:23 WItam.Mam pewien problem: Uczę się SDL z poradnika na tej stronie i nie wyświetla mi obrazka ;/ mam kod: **main.cpp** #include "PolSDeL.h" SDL_Surface * obraz = NULL; SDL_Surface * text = NULL; SDL_Rect spr[ 1 ]; SDL_Rect tspr[ 1 ]; int main( int argc, char * args[] ) { pl_wlacz( "PolSDeL - BY Skovv" ); pl_tworz_okno( 640, 480, 32 ); spr[ 0 ].x = 0; spr[ 0 ].y = 50; spr[ 0 ].w = 0; spr[ 0 ].h = 50; spr[ 1 ].x = 50; spr[ 1 ].y = 100; spr[ 1 ].w = 0; spr[ 1 ].h = 50; tspr[ 0 ].x = 100; tspr[ 0 ].y = 100; tspr[ 1 ].x = 500; tspr[ 1 ].y = 100; pl_wczytaj_bmp( obraz, "lol.bmp" ); pl_wczytaj_bmp( text, "tx.bmp" ); pl_wyswietl_bmp( obraz, NULL, NULL ); pl_wyswietl_bmp( text, & spr[ 0 ], & tspr[ 0 ] ); pl_wyswietl_bmp( text, & spr[ 1 ], & tspr[ 1 ] ); pl_wylaczanie_krzyzykiem(); pl_wylacz(); pl_zwolnij_bmp( obraz ); pl_zwolnij_bmp( text ); return 0; } **PolSDeL.h**
#include <SDL/SDL.h> SDL_Surface * ekran = NULL; SDL_Event zdarzenie; bool wyjscie = false; void pl_wlacz( char * tytul ) { SDL_Init( SDL_INIT_EVERYTHING ); SDL_WM_SetCaption( tytul, NULL ); } void pl_wylacz() { SDL_Quit(); } void pl_tworz_okno( int w, int h, int glebia_kolorow ) { ekran = SDL_SetVideoMode( w, h, glebia_kolorow, SDL_SWSURFACE ); pl_akt( ekran ); } void pl_akt( SDL_Surface * poww ) { SDL_Flip( poww ); } void pl_pauza( int czas ) { SDL_Delay( czas ); } void pl_wylaczanie_krzyzykiem() { while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } } } }
void pl_wczytaj_bmp( SDL_Surface * obrazek, char * sciezka ) { obrazek = SDL_LoadBMP( sciezka ); } void pl_wyswietl_bmp( SDL_Surface * obr, SDL_Rect * poz, SDL_Rect * poz2 ) { SDL_BlitSurface( obr, poz, ekran, poz2 ); } void pl_zwolnij_bmp( SDL_Surface * obrazek ) { SDL_FreeSurface( obrazek ); }
Będę wdzięczny za pomoc |
|
DejaVu |
» 2010-07-03 21:43:18 1) Plik nie istnieje pod podaną ścieżką (np. inny katalog roboczy niż miejsce pliku exe). 2) Plik z grafiką nie został załadowany ponieważ jest uszkodzony - powstał np. poprzez zmianę nazwy pliku i w rzeczywistości posiada inny format danych, którego biblioteka nie obsługuje. 3) Grafika wczytała się prawidłowo ale nie jest wyświetlana na ekranie.
/edit: Ostro... SDL w języku polskim?? WTF is that :) |
|
kamillo121 |
» 2010-07-03 22:11:37 Z tym wczytaniem obrazka to nie jest tak do końca , fakt tak nie działa ale jak dasz np void load( SDL_Surface *( & surf ), char * src ) { surf = SDL_LoadBMP( src ); } to zadziała :) Poza tym przepisywanie funkcji to działanie co najmniej bezsensowne //edit albo SDL_Surface * load( char * filename ) { SDL_Surface * surf = SDL_LoadBMP( filename ); surf = SDL_DisplayFormat( surf ); return surf; } ale to bez sensu bo przecież to robi funkcja loadmp |
|
malan |
» 2010-07-03 22:33:09 Chcą zmodyfikować wskaźnik w funkcji musisz przesłać jego adres. void pl_wczytaj_bmp( SDL_Surface ** obrazek, char * sciezka ) { ( * obrazek ) = SDL_LoadBMP( sciezka ); } Przykładowe wywołanie: pl_wczytaj_bmp( & bitmapa, "myFoo.jpg" );
Nie jestem pewny, czy to o to chodzi, ale spróbować nie zaszkodzi :). |
|
lenrokskate |
» 2010-07-03 23:05:10 a nie lepiej normalnie referencją? |
|
Elaine |
» 2010-07-04 00:56:47 Tja, potem się domyślaj na podstawie wywołania, czy przekazujesz wartość, czy odniesienie do obiektu. W przypadku wskaźników doskonale to widać. W przypadku referencji już nie bardzo.
W tym zresztą przypadku najlepiej by było zwrócić wartość "po bożemu", zamiast kombinować ze wskaźnikami czy referencjami... |
|
skovv Temat założony przez niniejszego użytkownika |
» 2010-07-04 10:03:35 a mam jeszcze 1 pytanie: jak zwrócić uchwyt utworzonego okna SDL? |
|
malan |
» 2010-07-04 11:45:44 SDL_Surface * LoadBitmap( const char * bmpName ) { return SDL_LoadBMP( bmpName ); }; Nie jestem pewny, czy zadziała. |
|
« 1 » |