domin568 Temat założony przez niniejszego użytkownika |
[SDL] Problem z załadowaniem pliku BMP do tablicy dwuwymiarowej » 2013-03-10 18:54:31 Witajcie , chciałem napisać grę "Statki" w SDL jednak już mam problem , bo wcale nie ładuje mi pliku BMP do programu , sprawdziłem sobie to łatwą komendą : if( !statki[ i ][ k ] ) { printf( "Unable to load bitmap: %s\n", SDL_GetError() ); return 1; }
I kiedy klikne to mnie wywala i zwraca jedynke , czyli że coś poszło nie tak , i te bitmapy się nie ładują . Tutaj cały kod źródłowy #ifdef __cplusplus #include <cstdlib> #else #include <stdlib.h> #endif
#include <SDL/SDL.h> #include <iostream> #include <ctime> #include <sstream> #include <string>
using namespace std; SDL_Rect statek_Dane;
SDL_Rect statek_Cel;
int x; int y; const int ILOSC_STATKOW_X = 10; const int ILOSC_STATKOW_Y = 10; const int ILOSC_WSZYSTKICH_STATKOW = 100; int mouseX, mouseY; int random( int nMin, int nMax ) { return rand() % nMax + 1 + nMin; } SDL_Surface * statki[ ILOSC_STATKOW_X ][ ILOSC_STATKOW_Y ]; const int wyso_Map = 1000; const int szer_Map = 1000; SDL_Surface * ekran = NULL; SDL_Surface * przycisk_null = NULL; SDL_Surface * przycisk_gracz_1 = NULL; SDL_Surface * przycisk_gracz_2 = NULL; SDL_Event zdarzenie; SDL_Rect statek_1; SDL_Rect statek_2; SDL_Rect statek_null; bool wyjscie = false; int a = 50; int b = 100; int main( int argc, char ** argv ) { statek_Dane.w = 10; statek_Dane.h = 10; statek_Cel.x = 0; statek_Cel.y = 0; ekran = SDL_SetVideoMode( 1000, 1000, 32, SDL_SWSURFACE ); przycisk_null = SDL_LoadBMP( "przycisk_null.bmp" ); przycisk_gracz_1 = SDL_LoadBMP( "przycisk_gracz_1.bmp" ); przycisk_gracz_2 = SDL_LoadBMP( "przycisk_gracz_2.bmp" ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { statek_Cel.x = x; statek_Cel.y = y; if( zdarzenie.type == SDL_MOUSEMOTION ) { mouseX = zdarzenie.motion.x; mouseY = zdarzenie.motion.y; } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { for( int i = 0; i < ILOSC_STATKOW_Y; i++ ) { for( int k = 0; i < ILOSC_STATKOW_X; i++ ) { statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null" ); if( !statki[ i ][ k ] ) { printf( "Unable to load bitmap: %s\n", SDL_GetError() ); return 1; } } } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { if( zdarzenie.button.button == SDL_BUTTON_LEFT ) { for( int i = 0; i < ILOSC_STATKOW_Y; i++ ) { x += 10; y += 10; for( int k = 0; k < ILOSC_STATKOW_X; k++ ) { SDL_BlitSurface( statki[ i ][ k ], NULL, ekran, & statek_Cel ); } } } } } } } }
, naprawde bardzo proszę o pomoc , chciałbym dzisiaj dokończyć to pokazywanie tych statków jeszcze dzisiaj. |
|
SeaMonster131 |
» 2013-03-10 18:57:45 statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null" ); Nie ma rozszerzenia pliku. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-03-10 19:10:59 Haha :P Ale głupi błąd , że ja tego nie zauważyłem , jednak gdy w SDL_BlitSurface wpisze statki[0][0]tak dla sprawdzenia czy wogóle coś się pokaże to gdy klikne myszką to się nic nie dzieje . Czemu >?? mógłby ktoś naprowadzić ?? Wiem Ze cos z tym ostatnim sfagmentem skopałem ale nie wiem jak to naprawic . |
|
pekfos |
» 2013-03-10 19:30:27 Zasoby ładujesz w pętli głównej i nie widać, żebyś je gdziekolwiek zwalniał. Ten kod do jeden wielki wyciek pamięci. W paru miejscach widać, że nie wiesz co robisz, a niektóre fragmenty chyba zostały skądś skopiowane.. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-03-10 22:45:06 Może rzucać się na głęboką wodę , ale czy ktoś mógłby mnie jakoś naprowadzic ?? @pefkos ja wiem ze tutaj niektóre linijki są bez sensu , masz racje , optymalizacja kodu tez jest zerowa , jednak te elementy można dopasować pózniej , większość błędów jest z mojej bezradności i niewiedzy , ale na tyle o ile potrafiłem tyle napisałem , więc od tego jest forum żeby sobie pomagać :) Mógłby ktoś chociaż dać jakaś "złotą myśl" ??? |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-03-11 18:56:44 Ok , naprawiłem , i to co chciałem to działa :) , może dlatego tak lamiłem bo pisałem jak byłem zmęczony :) Kod jeżeli komuś pomoże :) : #ifdef __cplusplus #include <cstdlib> #else #include <stdlib.h> #endif
#include <SDL/SDL.h> #include <iostream> #include <ctime> #include <sstream> #include <string>
using namespace std; SDL_Rect statek_Dane;
SDL_Rect statek_Cel;
int x; int y; const int ILOSC_STATKOW_X = 10; const int ILOSC_STATKOW_Y = 10; const int ILOSC_WSZYSTKICH_STATKOW = 100; int mouseX, mouseY; int random( int nMin, int nMax ) { return rand() % nMax + 1 + nMin; } SDL_Surface * statki[ ILOSC_STATKOW_X ][ ILOSC_STATKOW_Y ]; const int wyso_Map = 1000; const int szer_Map = 1000; SDL_Surface * ekran = NULL; SDL_Surface * przycisk_null = NULL; SDL_Surface * przycisk_gracz_1 = NULL; SDL_Surface * przycisk_gracz_2 = NULL; SDL_Event zdarzenie; SDL_Rect statek_1; SDL_Rect statek_2; SDL_Rect statek_null; bool wyjscie = false; int a = 50; int b = 100; int main( int argc, char ** argv ) { statek_Dane.w = 100; statek_Dane.h = 100; statek_Cel.x = 0; statek_Cel.y = 0; ekran = SDL_SetVideoMode( 1000, 1000, 32, SDL_SWSURFACE ); przycisk_null = SDL_LoadBMP( "przycisk_null.bmp" ); przycisk_gracz_1 = SDL_LoadBMP( "przycisk_gracz_1.bmp" ); przycisk_gracz_2 = SDL_LoadBMP( "przycisk_gracz_2.bmp" ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { statek_Cel.x = x; statek_Cel.y = y; if( zdarzenie.type == SDL_MOUSEMOTION ) { mouseX = zdarzenie.motion.x; mouseY = zdarzenie.motion.y; } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { for( int i = 0; i < ILOSC_STATKOW_Y; i++ ) { for( int k = 0; i < ILOSC_STATKOW_X; i++ ) { statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null.bmp" ); if( !statki[ i ][ k ] ) { printf( "Unable to load bitmap: %s\n", SDL_GetError() ); return 1; } } } if( zdarzenie.button.button == SDL_BUTTON_LEFT ) { for( int i = 0; i < ILOSC_STATKOW_X; i++ ) { x += 10; for( int k = 0; k < ILOSC_STATKOW_X; k++ ) { SDL_BlitSurface( statki[ i ][ k ], NULL, ekran, & statek_Cel ); } } for( int i = 0; i < ILOSC_STATKOW_X; i++ ) { if( x == 1000 ) { x = 0; y += 100; } } SDL_Flip( ekran ); } } } } } |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-03-12 18:54:16 Ok , jednak znowu mam problem , no bo jak można by stworzyć losowanie w tablicy dwuwymiarowej ?? w "czystym" c++ wiedziałbym jak to zrobić jednak w SDL nie jestem pewien , mógłby ktoś pomoć jak wylosować jakąś wartość ?? , chodzi o to że na początku ładuje zwykłe kafelki , potem kafelki (losowe) przeciwnika (statki) , i drugiego przeciwnika . Potem z wybieraniem to sobie chyba poradze ale jak zrobić losowanie gdzie będą te ukryte statki przeciwnika ??? Szczerze liczę na pomoc :) |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-03-13 17:16:15 Naprawdę nikt nie ma pomysłu ??? Jestem początkujący i trochę trudno mi to idzie ,więc byłbym wdzięczny za rozjasnienie tego : ) Z góry dzięki za pomoc .
|
|
« 1 » 2 |