Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[ALLEGRO] Zjadanie pamięci

Ostatnio zmodyfikowano 2010-12-10 21:55
Autor Wiadomość
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ę:
C/C++
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ę:
C/C++
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.
P-25022
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
P-25023
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.
P-25026
malan
» 2010-12-10 21:37:45
A spróbuj tak:
C/C++
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 );
        }
    }
}
P-25027
Dragonit
Temat założony przez niniejszego użytkownika
» 2010-12-10 21:49:38
Po wpisaniu tego:
C/C++
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
P-25029
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ęć.
P-25031
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 :)
P-25034
« 1 »
  Strona 1 z 1