Ernest171 Temat założony przez niniejszego użytkownika |
Animacja-Allegro » 2010-11-11 14:43:52 Mam problem zrobiłem że można chodzić ludkiem w lewo,prawo itd.
Ale gdy staje to znika.
Jak zrobić żeby nie znikał jak staje ?
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_palette( default_palette ); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 200 ) ); BITMAP * bufor = NULL; BITMAP * ludek_prawo1 = NULL; BITMAP * ludek_prawo2 = NULL; BITMAP * ludek_prawo3 = NULL; BITMAP * ludek_lewo1 = NULL; BITMAP * ludek_lewo2 = NULL; BITMAP * ludek_lewo3 = NULL; BITMAP * ludek_gora1 = NULL; BITMAP * ludek_gora2 = NULL; BITMAP * ludek_gora3 = NULL; BITMAP * ludek_dol1 = NULL; BITMAP * ludek_dol2 = NULL; BITMAP * ludek_dol3 = NULL; BITMAP * postac = 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_prawo1 = load_bmp( "ludek_prawo1.bmp", default_palette ); ludek_prawo2 = load_bmp( "ludek_prawo3.bmp", default_palette ); ludek_prawo3 = load_bmp( "ludek_prawo3.bmp", default_palette ); ludek_lewo1 = load_bmp( "ludek_lewo1.bmp", default_palette ); ludek_lewo2 = load_bmp( "ludek_lewo2.bmp", default_palette ); ludek_lewo3 = load_bmp( "ludek_lewo3.bmp", default_palette ); ludek_gora1 = load_bmp( "ludek_gora1.bmp", default_palette ); ludek_gora2 = load_bmp( "ludek_gora2.bmp", default_palette ); ludek_gora3 = load_bmp( "ludek_gora3.bmp", default_palette ); ludek_dol1 = load_bmp( "ludek_dol1.bmp", default_palette ); ludek_dol2 = load_bmp( "ludek_dol2.bmp", default_palette ); ludek_dol3 = load_bmp( "ludek_dol3.bmp", default_palette ); int ludek_x = 300, ludek_y = 300; 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 < 20 ) { draw_sprite( bufor, ludek_lewo1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_lewo1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_lewo2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_lewo3, ludek_x, ludek_y ); } if( key[ KEY_RIGHT ] ) if( frame < 20 ) { draw_sprite( bufor, ludek_prawo1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_prawo1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_prawo2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_prawo3, ludek_x, ludek_y ); } if( key[ KEY_UP ] ) if( frame < 20 ) { draw_sprite( bufor, ludek_gora1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_gora1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_gora2, ludek_x, ludek_y ); } if( key[ KEY_DOWN ] ) if( frame < 20 ) { draw_sprite( bufor, ludek_dol1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_dol1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_dol2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_dol3, ludek_x, ludek_y ); } blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); destroy_bitmap( ludek_prawo1 ); destroy_bitmap( ludek_prawo2 ); destroy_bitmap( ludek_prawo3 ); destroy_bitmap( ludek_lewo1 ); destroy_bitmap( ludek_lewo2 ); destroy_bitmap( ludek_lewo3 ); destroy_bitmap( ludek_gora1 ); destroy_bitmap( ludek_gora2 ); destroy_bitmap( ludek_gora3 ); destroy_bitmap( ludek_dol1 ); destroy_bitmap( ludek_dol2 ); destroy_bitmap( ludek_dol3 ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
SeaMonster131 |
» 2010-11-11 14:48:11 np przed tymi if'ami dotyczącymi poruszania się wyświetl ludzika gdy się nie porusza. I będzie dobrze :) Ponieważ wyświetlasz ludzika gdy naciśniesz lewo,góra,dół,prawo, a jak nic nie naciskasz to on po prostu sie nie wyświetla :) |
|
Ernest171 Temat założony przez niniejszego użytkownika |
animacja » 2010-11-11 14:59:18 Dałem tak i nie działa.
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 ] ) blit( ludek_lewo1, screen, 0, 0, 100, 100, ludek_lewo1->w, ludek_lewo1->h ); readkey(); if( frame < 20 ) { draw_sprite( bufor, ludek_lewo1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_lewo1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_lewo2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_lewo3, ludek_x, ludek_y ); } if( key[ KEY_RIGHT ] ) blit( ludek_prawo1, screen, 0, 0, 100, 100, ludek_prawo1->w, ludek_prawo1->h ); readkey(); if( frame < 20 ) { draw_sprite( bufor, ludek_prawo1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_prawo1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_prawo2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_prawo3, ludek_x, ludek_y ); } if( key[ KEY_UP ] ) blit( ludek_gora1, screen, 0, 0, 100, 100, ludek_gora1->w, ludek_gora1->h ); readkey(); if( frame < 20 ) { draw_sprite( bufor, ludek_gora1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_gora1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_gora2, ludek_x, ludek_y ); } if( key[ KEY_DOWN ] ) blit( ludek_dol1, screen, 0, 0, 100, 100, ludek_dol1->w, ludek_dol1->h ); readkey(); if( frame < 20 ) { draw_sprite( bufor, ludek_dol1, ludek_x, ludek_y ); } else if( frame >= 20 && frame < 40 ) { draw_sprite( bufor, ludek_dol1, ludek_x, ludek_y ); } else if( frame >= 40 && frame < 60 ) { draw_sprite( bufor, ludek_dol2, ludek_x, ludek_y ); } else if( frame >= 60 && frame < 80 ) { draw_sprite( bufor, ludek_dol3, ludek_x, ludek_y ); } blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); }
|
|
DejaVu |
» 2010-11-11 15:25:37 Rysuj ludzika zawsze, a nie warunkowo. Warunkowo decyduj jaki obrazek ma się rysować, np.
int klatka = 0; if( klawisz[ LEWO ] ) klatka = 1;
if( klawisz[ PRAWO ] ) klatka = 2;
switch( klatka ) { case 1: break; case 2: break; default: break; }
|
|
dmx81 |
» 2010-11-11 16:51:14 lub bez switch'a jesli chcesz mniej pisania :P if( klawisz[ LEWO ] ) klatka = 1;
else if( klawisz[ PRAWO ] ) klatka = 2;
else klatka = 0;
rysuj( klatka );
oczywiscie jesli dopiszesz sobie ruch w gore lub w dol i bedziesz chcial zmienic jeszcze animacje, musisz pozniej sobie dopisac nowe warunki else if, a ostatni jako domyslny |
|
Ernest171 Temat założony przez niniejszego użytkownika |
animacja » 2010-11-11 19:25:40 Dzięki, Temat do usunięcia. |
|
« 1 » |