ziajek444 Temat założony przez niniejszego użytkownika |
Koniec pamięci masowe = koniec programu, co robić? » 2013-02-28 20:28:14 Mam fajny kodzik, i planuje go dalej rozwijać ale zauważyłem że mi się gra wyłącza po kilku minutach. Poczytałem trochę fora i doszedłem do wniosku że coś w moim kodzie ciągle zwiększa zużycie pamięci, i jak zużyje całą to się wyłącza. Proszę pomóżcie gdzie ten "zbój" w moim kodzie? Podejrzewam pętle (while); P.S. Śmiało pozwalam skopiować kod i sprawdzić go u siebie (pisany w allegro 4.4.2) #include <allegro.h>
BITMAP * bufor; class postac { protected: int txr[ 10 ]; int txl[ 10 ]; int ty[ 10 ]; int poz_x; int poz_y; bool left; BITMAP * ludek; BITMAP * ludek2; BITMAP * bg; public: void standing( int poz_x, int poz_y, bool left, BITMAP * ludek2, BITMAP * ludek, BITMAP * bg ); void walking( int poz_x, int poz_y, bool left, BITMAP * ludek2, BITMAP * ludek, BITMAP * bg ); void jumping( int poz_x, int poz_y, bool left, BITMAP * ludek2, BITMAP * ludek, BITMAP * bg ); }; void bitbifot() { bufor = create_bitmap( 800, 600 ); };
void postac::standing( int poz_x, int poz_y, bool left, BITMAP * ludek2, BITMAP * ludek, BITMAP * bg ) { txr[ 0 ] = 0; txr[ 1 ] = 80; txr[ 2 ] = 160; txr[ 3 ] = 240; ty[ 0 ] = 0; txl[ 0 ] = 720; txl[ 1 ] = 720 - 80; txl[ 2 ] = 720 - 160; txl[ 3 ] = 720 - 160 - 80; int static klatka_x = 0; int static klatka_y = 0; int static a = 1; if( a == 0 ) klatka_x--; if( a == 1 ) klatka_x++; if( klatka_x == 3 ) a = 0; if( klatka_x == 0 ) a = 1; if( left == false ) masked_blit( ludek, bufor, txr[ klatka_x ], 0, poz_x, poz_y, 60, 80 ); if( left == true ) masked_blit( ludek2, bufor, txl[ klatka_x ], 0, poz_x, poz_y, 60, 80 ); };
void postac::walking( int poz_x, int poz_y, bool left, BITMAP * ludek2, BITMAP * ludek, BITMAP * bg ) { txr[ 4 ] = 320; txr[ 5 ] = 400; txr[ 6 ] = 480; txr[ 7 ] = 560; ty[ 0 ] = 0; txl[ 4 ] = 720 - 160 - 160; txl[ 5 ] = txl[ 4 ] - 80; txl[ 6 ] = txl[ 5 ] - 80; txl[ 7 ] = txl[ 6 ] - 80; int static klatka_x = 4; int static klatka_y = 0; int static a = 1; if( a == 0 ) klatka_x--; if( a == 1 ) klatka_x++; if( klatka_x == 7 ) a = 0; if( klatka_x == 3 ) a = 1; if( left == false ) masked_blit( ludek, bufor, txr[ klatka_x ], 0, poz_x, poz_y, 60, 80 ); if( left == true ) masked_blit( ludek2, bufor, txl[ klatka_x ], 0, poz_x, poz_y, 60, 80 ); };
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); BITMAP * ludek = load_bmp( "davis_0.bmp", default_palette ); BITMAP * ludek2 = load_bmp( "davis_0_m.bmp", default_palette ); BITMAP * ludeka = load_bmp( "freeze_0.bmp", default_palette ); BITMAP * ludek2a = load_bmp( "freeze_0_m.bmp", default_palette ); BITMAP * bg = load_bmp( "bground.bmp", default_palette ); postac marcin, ziajek; bitbifot(); int poz_x = 100; int poz_y = 200; int poz_x2 = 400; int poz_y2 = 300; bool left = false; bool left2 = true; bool go = false; bool go2 = false; rest( 2000 ); while( !key[ KEY_ESC ] ) { go2 = false; go = false; if( key[ KEY_LEFT ] ) { go = true; left = true; poz_x -= 10; } if( key[ KEY_RIGHT ] ) { go = true; left = false; poz_x += 10; } if( key[ KEY_UP ] ) { go = true; poz_y -= 10; } if( key[ KEY_DOWN ] ) { go = true; poz_y += 10; } if( key[ KEY_A ] ) { go2 = true; left2 = true; poz_x2 -= 10; } if( key[ KEY_D ] ) { go2 = true; left2 = false; poz_x2 += 10; } if( key[ KEY_W ] ) { go2 = true; poz_y2 -= 10; } if( key[ KEY_S ] ) { go2 = true; poz_y2 += 10; } clear_to_color( bufor, makecol( 255, 0, 255 ) ); bg = load_bmp( "bground.bmp", default_palette ); if( go == false ) marcin.standing( poz_x, poz_y, left, ludek2, ludek, bg ); if( go2 == false ) ziajek.standing( poz_x2, poz_y2, left2, ludek2a, ludeka, bg ); if( go == true ) marcin.walking( poz_x, poz_y, left, ludek2, ludek, bg ); if( go2 == true ) ziajek.walking( poz_x2, poz_y2, left2, ludek2a, ludeka, bg ); masked_blit( bufor, bg, 0, 0, 0, 0, bg->w, bg->h ); blit( bg, screen, 0, 0, 0, 0, bg->w, bg->h ); rest( 20 ); } readkey(); destroy_bitmap( bufor ); destroy_bitmap( bg ); destroy_bitmap( ludek ); destroy_bitmap( ludek2 ); destroy_bitmap( ludeka ); destroy_bitmap( ludek2a ); return 0; } END_OF_MAIN();
|