Dragonit Temat założony przez niniejszego użytkownika |
[ALLEGRO] Zjadanie pamięci » 2010-12-10 21:02:33 Witam pisze prostą gierkę. Napisałem funkcję generującą mapę i ją rysującą. Wszystko fajnie działa, ale zauważyłem, że gra pożera mi pamięć w zastraszającym tempie, zauważyłem że to przez funkcję rysującą mapę. Zastanawia mnie czemu się tak dzieje. Oto funkcje: Funkcja generująca mapę: bool czySciana[ 24 ][ 24 ]; BITMAP * sciana[ 24 ][ 24 ];
void GenerujMape() { srand( static_cast < int >( time( NULL ) ) ); for( int i = 0; i < 24; i++ ) { for( int j = 0; j < 24; j++ ) { czySciana[ i ][ j ] =( rand() %( true + 1 - false ) ) + false; } } }
Funkcja rysująca mapę: void RysujMape() { for( int i = 0; i < 24; i++ ) { for( int j = 0; j < 24; j++ ) { if( czySciana[ i ][ j ] == true ) sciana[ i ][ j ] = load_bmp( "data\\scianaTak.bmp", default_palette ); else sciana[ i ][ j ] = load_bmp( "data\\scianaNie.bmp", default_palette ); blit( sciana[ i ][ j ], bufor, 0, 0, sciana[ i ][ j ]->w * i, sciana[ i ][ j ]->h * j, sciana[ i ][ j ]->w, sciana[ i ][ j ]->h ); } } }
Z góry dzięki. PS. Jeśli ktoś zna szybsze funkcje od tych powyżej, bo te moje to istne ślimacze tempo to niech się pochwali. |
|
ison |
» 2010-12-10 21:13:52 do każdej komórki ładujesz osobno bitmapę i się dziwisz że Ci pamięć zjada? dla bitmap o wielkości 500x500: 1 bitmapa - ~800KB 24x24 bitmap = 576 bitmap 576 * 800KB = 460800KB = 450MB |
|
Dragonit Temat założony przez niniejszego użytkownika |
» 2010-12-10 21:34:16 No tak mam 576 bitmap o wielkości 1.22kb w tablicy bitmap 24x24. Ale każdą bitmapą muszę operować osobno, więc jak to zrobić aby przyspieszyć proces ładowania mapy zapisując każdą bitmapkę do jednej komórki tablicy i nie tracić ciągle pamięci, gdy włączam grę to widzę jak pamięć spada, ma raz załadować i gotowe a ładuje ciągle, dlatego taki zanik pamięci. |
|
malan |
» 2010-12-10 21:37:45 A spróbuj tak: BITMAP * noWall = load_bmp( "data\\scianaNie.bmp", default_palette ); BITMAP * wall = load_bmp( "data\\scianaTak.bmp", default_palette );
void RysujMape() { for( int i = 0; i < 24; i++ ) { for( int j = 0; j < 24; j++ ) { if( czySciana[ i ][ j ] == true ) sciana[ i ][ j ] = wall; else sciana[ i ][ j ] = noWall; blit( sciana[ i ][ j ], bufor, 0, 0, sciana[ i ][ j ]->w * i, sciana[ i ][ j ]->h * j, sciana[ i ][ j ]->w, sciana[ i ][ j ]->h ); } } } |
|
Dragonit Temat założony przez niniejszego użytkownika |
» 2010-12-10 21:49:38 Po wpisaniu tego: BITMAP * noWall = load_bmp( "data\\scianaNie.bmp", default_palette ); BITMAP * wall = load_bmp( "data\\scianaTak.bmp", default_palette );
wogóle mi się program nie uruchamia |
|
DejaVu |
» 2010-12-10 21:52:53 1) Zainicjuj tryb graficzny
2) Wczytaj grafiki
3) Rysuj wszystko
Ty wczytujesz co chwilę bitmapę więc co nie ma co się dziwić, że pochłania Ci pamięć. |
|
Dragonit Temat założony przez niniejszego użytkownika |
» 2010-12-10 21:55:55 Dzięki wszystkim, a w szczególności malanowi za pomoc, jego funkcja działa i cały projekt śmiga i już nie zjada pamięci :)
|
|
« 1 » |