Forczek Temat założony przez niniejszego użytkownika |
[Allegro] Animacja » 2012-06-08 17:01:23 Kod: #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, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 150 ) ); BITMAP * bufor = NULL; BITMAP * ludek = NULL; BITMAP * ludek0 = NULL; BITMAP * ludek1 = NULL; BITMAP * ludek2 = NULL; BITMAP * ludek3 = NULL; BITMAP * ludek4 = NULL; BITMAP * ludek5 = NULL; 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; } ludek = load_bmp( "ludek.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 ); int ludek_x = 100, ludek_y = 100; int frame = 0; while( !key[ KEY_ESC ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] ) ludek_x--; if( key[ KEY_RIGHT ] ) ludek_x++; if( key[ KEY_UP ] ) ludek_y--; if( key[ KEY_DOWN ] ) ludek_y++; speed--; frame++; if( frame > 80 ) frame = 0; } clear_to_color( bufor, makecol( 150, 150, 150 ) ); if( key[ KEY_LEFT ] ) { if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); } else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); } } if( key[ KEY_RIGHT ] ) { if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); } else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); } } if( key[ KEY_UP ] ) { if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); } else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); } } if( key[ KEY_DOWN ] ) { if( frame < 75 ) { draw_sprite( bufor, ludek, ludek_x, ludek_y ); } else if( frame >= 75 && frame < 150 ) { draw_sprite( bufor, ludek4, ludek_x, ludek_y ); } } masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); destroy_bitmap( ludek0 ); destroy_bitmap( ludek1 ); destroy_bitmap( ludek2 ); destroy_bitmap( ludek3 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
Chodzi tu o to, że animacja działa po naciśnięciu klawisza. I gdy naciskam, animacja nakłada się na obrazek domyślny. A jak nie dam domyślnego: "masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );" to wtedy jest pusto i widać tylko animacje jak się naciśnie klawisz. Jak zrobić aby było widać postać, a jak się naciśnie klawisz to aby nie nakładały się obrazy. Może trochę pokręcenie napisałem :P |
|
SeaMonster131 |
» 2012-06-08 20:46:40 if( klawisz w lewo ) { frame++; ... } else if( klawisz w prawo ) { frame++; ... } else if( klawisz do gory ) { frame++; ... } else if( klawisz na dol ) { frame++; ... } else { frame = 0; ... }
Tam gdzie kropki dajesz rysowanie gracza. To tylko przykład, bo można kod też inaczej napisać. |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2012-06-09 13:58:39 Nie pomogło, nadal postacie się na siebie nakładają. |
|
SeaMonster131 |
» 2012-06-09 14:17:24 Zrobiłeś dokladnie tak jak Ci powiedziałem? Nigdzie więcej nie rysujesz gracza? |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2012-06-09 18:11:16 Zrobiłem tak że rysuje go tylko jak jest ruch. No i wtedy jak stoi to go nie ma. I jak się rusza to wtedy go widać i normalnie animacje. A jak dam go poza warunkiem if żeby normalnie był to się nakłada. |
|
SeaMonster131 |
» 2012-06-09 23:04:26 To zrób tak jak ja Ci napisałem. Wystarczy, że zmienisz konstrukcje: if() {}, if() {} ... na if() {}, else if() {}, else. A problemu nie będzie. |
|
Forczek Temat założony przez niniejszego użytkownika |
» 2012-06-10 11:42:42 Ok, popróbuje jeszcze, dzięki wielkie. Chyba widzę błąd. |
|
« 1 » |