ecpp-mateusz Temat założony przez niniejszego użytkownika |
[Allegro] Problem z animacją i mapą » 2008-07-10 12:56:32 Udało mi się jakoś połączyć animacje i wyświetlanie mapy.Dało się skompilować i uruchomić - i tutaj pies zagrzebany.Gdy właczam "grę" to tylko czarne tło ,bez mapy i ludzika i po tym następuje błąd i aplikacja się zawiesza i zamyka.Jeśli ktoś mógłby spojrzeć na kod i napisał jakie błędy popełniłem bardzo bym dziękował. Zadanie: wybrałem Allegro do tego celu ,żeby napisać coś podobnego do GTA tylko że nie aż takie wielkie mapy;]. Kod : #include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
class Cpostac { public: int x, y; short int kierunek, klatka; };
Cpostac ludek;
int mapa_x = 0, mapa_y = 0; BITMAP * teren = NULL; BITMAP * bufor = NULL;
short int map[ 10 ][ 20 ] = { 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 4, 9, 10, 10, 10, 8, 3, 5, 15, 0, 2, 2, 2, 1, 15, 2, 1, 15, 15, 15, 15, 7, 10, 10, 10, 6, 15, 15, 15, 7, 10, 10, 10, 6, 15, 10, 6, 15, 15, 15, 15, 4, 9, 10, 10, 6, 15, 15, 15, 4, 3, 3, 3, 5, 15, 10, 12, 2, 1, 15, 15, 15, 7, 10, 8, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10, 10, 10, 6, 15, 15, 15, 4, 3, 5, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2, 10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2, 13, 10, 10, 3, 3, 3, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 8, 3, 15, 15, 15, 15, 15, 0, 1, 15, 15, 15, 15, 15, 0, 2, 13, 10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 4, 5, 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 6, 15 };
void wys_mape() { int licznik_x, licznik_y; for( licznik_x = 0; licznik_x < 10; licznik_x++ ) { for( licznik_y = 0; licznik_y < 5; licznik_y++ ) { blit( teren, bufor, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40, ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40, licznik_x * 40, licznik_y * 40, 40, 40 ); } } };
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 40 ) ); bufor = create_bitmap( 640, 480 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora !" ); allegro_exit(); return 0; } BITMAP * bufor = NULL; BITMAP * ludekb = NULL; ludekb = load_bmp( "postac.bmp", default_palette ); teren = load_bmp( "teren.bmp", default_palette ); while( !key[ KEY_ESC ] ) { while( speed > 0 ) { int frame = 0; ludek.x = 100; ludek.y = 100; ludek.klatka = 0; ludek.kierunek = 0; ludek.kierunek = 0; if( key[ KEY_LEFT ] ) { ludek.kierunek = 4; ludek.x -= 2; } if( key[ KEY_RIGHT ] ) { ludek.kierunek = 2; ludek.x += 2; } if( key[ KEY_UP ] ) { ludek.kierunek = 1; ludek.y -= 2; } if( key[ KEY_DOWN ] ) { ludek.kierunek = 3; ludek.y += 2; } speed--; if( frame < 20 ) { ludek.klatka = 0; } else if( frame >= 20 && frame < 40 ) { ludek.klatka = 1; } if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) ) { mapa_x = mapa_x + 1; } else if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) { mapa_x = mapa_x - 1; } else if(( key[ KEY_DOWN ] ) &&( mapa_y < 5 ) ) { mapa_y = mapa_y + 1; } else if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 1; } speed--; } masked_blit( ludekb, bufor, ludek.kierunek * 60, ludek.klatka * 60, ludek.x, ludek.y, 60, 60 ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); clear_to_color( bufor, makecol( 150, 150, 150 ) ); wys_mape(); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); destroy_bitmap( ludekb ); destroy_bitmap( bufor ); destroy_bitmap( teren ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|