drago77 Temat założony przez niniejszego użytkownika |
[Allegro]Problem ze scrollowaniem mapy » 2012-02-10 13:44:44 Witam. Dopiero co zacząłem swoją przygodę z allegro i mam takie pytanie. Stworzyłem bitmape czolg, którą mogłem poruszać na ekranie. Potem chciałem zrobić mapę, i... lipa, bo mój czołg nie chce się poruszyć, a mapy jak nie było tak nie ma. Ma ktoś jakiś pomysł? Oto kod: #define ALLEGRO_STATICLINK #include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
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 };
int mapa_x = 0, mapa_y = 0; void wys_mape( BITMAP * bufor, BITMAP * teren ) { 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( 32 ); set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1024, 768, 0, 0 ); clear_to_color( screen, makecol( 128, 128, 128 ) ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) ); BITMAP * teren = NULL; BITMAP * czolg = NULL; BITMAP * czolg_buffor = NULL; teren = load_bmp( "C:\\obrazy\\kafel.bmp", default_palette ); if( !teren ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie moge wyswietlic terenu" ); allegro_exit(); return 0; } czolg_buffor = create_bitmap( 1024, 768 ); if( !czolg_buffor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora !" ); allegro_exit(); return 0; } czolg = load_bmp( "C:\\obrazy\\czolg.bmp", default_palette ); if( !czolg ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie moge za³adowac obrazka czolg !" ); allegro_exit(); return 0; } int ludek_x = 100, ludek_y = 100; while( !key[ KEY_ESC ] ) { if( speed > 0 ) { if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) ) mapa_x += 1; else if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) mapa_x -= 1; else if(( key[ KEY_DOWN ] ) &&( mapa_y < 5 ) ) mapa_y += 1; else if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) mapa_y -= 1; speed++; clear_to_color( czolg_buffor, makecol( 150, 150, 150 ) ); rest( 1 ); masked_blit( czolg, czolg_buffor , 0, 0, ludek_x, ludek_y, czolg->w, czolg->h ); blit( czolg_buffor, screen, 0, 0, 0, 0, 1024, 768 ); } } remove_int( increment_speed ); destroy_bitmap( teren ); destroy_bitmap( czolg ); destroy_bitmap( czolg_buffor ); allegro_exit(); return 0; } END_OF_MAIN();
|