Forczek Temat założony przez niniejszego użytkownika |
Allegro, animacja wraz z buforami. » 2012-05-26 18:30:14 Siemka, na początek kodzik: #include <allegro.h>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed ); int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 500, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 200 ) ); BITMAP * postac = NULL; BITMAP * postac0 = NULL; BITMAP * postac1 = NULL; BITMAP * postac2 = NULL; BITMAP * postac3 = NULL; BITMAP * postac4 = NULL; BITMAP * postac5 = NULL; BITMAP * ludek = NULL; BITMAP * ludek0 = NULL; BITMAP * ludek1 = NULL; BITMAP * ludek2 = NULL; BITMAP * ludek3 = NULL; BITMAP * ludek4 = NULL; BITMAP * ludek5 = NULL; BITMAP * buffor = NULL; BITMAP * tlo = NULL; postac0 = load_bmp( "postac0.bmp", default_palette ); postac1 = load_bmp( "postac1.bmp", default_palette ); postac2 = load_bmp( "postac2.bmp", default_palette ); postac3 = load_bmp( "postac3.bmp", default_palette ); postac4 = load_bmp( "postac4.bmp", default_palette ); postac5 = load_bmp( "postac5.bmp", default_palette ); ludek0 = load_bmp( "ludek0.bmp", default_palette ); ludek1 = load_bmp( "ludek1.bmp", default_palette ); ludek2 = load_bmp( "ludek2.bmp", default_palette ); ludek3 = load_bmp( "ludek3.bmp", default_palette ); ludek4 = load_bmp( "ludek4.bmp", default_palette ); ludek5 = load_bmp( "ludek5.bmp", default_palette ); tlo = load_bmp( "tlo.bmp", default_palette ); int postac_x = 500, postac_y = 200; int ludek_x = 100, ludek_y = 200; int frame = 0; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { frame++; if( frame > 150 ) frame = 0; if( key[ KEY_A ] ) { if( frame < 50 ) { draw_sprite( buffor, ludek, ludek_x, ludek_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, ludek5, ludek_x, ludek_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } ludek_x--; } if( key[ KEY_D ] ) { ludek_x++; if( frame < 50 ) { draw_sprite( buffor, ludek, ludek_x, ludek_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, ludek5, ludek_x, ludek_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } } if( key[ KEY_W ] ) { if( frame < 50 ) { draw_sprite( buffor, ludek, ludek_x, ludek_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, ludek5, ludek_x, ludek_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } ludek_y--; } if( key[ KEY_S ] ) { if( frame < 50 ) { draw_sprite( buffor, ludek, ludek_x, ludek_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, ludek5, ludek_x, ludek_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, ludek4, ludek_x, ludek_y ); } ludek_y++; } if( key[ KEY_LEFT ] ) { if( frame < 50 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, postac4, postac_x, ludek_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, postac5, postac_x, ludek_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, postac4, postac_x, ludek_y ); } postac_x--; } if( key[ KEY_RIGHT ] ) { if( frame < 50 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } postac_x++; } if( key[ KEY_UP ] ) { if( frame < 50 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, postac4, postac_x, postac_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, postac5, postac_x, postac_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, postac4, postac_x, postac_y ); } postac_y--; } if( key[ KEY_DOWN ] ) { if( frame < 50 ) { draw_sprite( buffor, postac, postac_x, postac_y ); } else if( frame >= 50 && frame < 100 ) { draw_sprite( buffor, postac4, postac_x, postac_y ); } else if( frame >= 100 && frame < 150 ) { draw_sprite( buffor, postac5, postac_x, postac_y ); } else if( frame >= 150 && frame < 200 ) { draw_sprite( buffor, postac4, postac_x, postac_y ); } postac_y++; } speed--; } clear_to_color( buffor, makecol( 150, 150, 150 ) ); blit( tlo, screen, 0, 0, 0, 0, 800, 500 ); masked_blit( ludek, buffor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h ); masked_blit( postac, buffor, 0, 0, postac_x, postac_y, postac->w, postac->h ); blit( buffor, screen, 0, 0, 0, 0, 800, 500 ); } remove_int( increment_speed ); destroy_bitmap( ludek ); destroy_bitmap( ludek0 ); destroy_bitmap( ludek1 ); destroy_bitmap( ludek2 ); destroy_bitmap( ludek3 ); destroy_bitmap( ludek4 ); destroy_bitmap( ludek5 ); destroy_bitmap( postac ); destroy_bitmap( postac0 ); destroy_bitmap( postac1 ); destroy_bitmap( postac2 ); destroy_bitmap( postac3 ); destroy_bitmap( postac4 ); destroy_bitmap( postac5 ); destroy_bitmap( tlo ); destroy_bitmap( buffor ); remove_int( increment_speed ); readkey(); allegro_exit(); return 0; } END_OF_MAIN();
Problem w tym, że tło mi miga chociaż mam bufora. No i animacja się nie animuje. Co jest źle? To moja pierwsza gra dopiero się uczę, więc proszę jak najprościej :D |