maniek099 Temat założony przez niniejszego użytkownika |
[Allegro] Problem ze zmianą predkosci programu. » 2010-01-18 19:50:58 Powitać. Otóż postanowiłem napisać gierkę taką, że widać z góry samochód i ruszamy się nim tylko w lewo i prawo, jedziemy pod prąd no i zderzamy się ze samochodami (pełno takich). Problem polega na tym, że nie chce by cały czas wszystko poruszało się z jedną prędkością i tu właśnie nie wiem jak zastosować timer. Próbowałem bez tych timerów, tylko z rest, że gdy wcisnę strzałkę w dół to zmienna++; i po tem rest(zmienna); lecz gdy zmienna=1, czyli rest(1), to program strasznie wolno już chodzi (jak na grę, ze samochodami to za wolno). Oto mój kawałek kodu (wszystkie funkcje identyczne jak w kursie): init();
install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
BITMAP * jaguar = NULL; BITMAP * bufor = NULL;
bufor = create_bitmap( 800, 600 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować bufora!" ); allegro_exit(); return 0; }
jaguar = load_bmp( "jaguar.bmp", default_palette );
int obraz_x = 40, obraz_y = 400; double predkosc = 1; int pixel_y = 0;
while( !key[ KEY_ESC ] ) { rectfill( bufor, 400, pixel_y, 410, pixel_y + 50, makecol( 128, 30, 30 ) ); masked_blit( jaguar, bufor, 0, 0, obraz_x, obraz_y, jaguar->w, jaguar->h ); textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Predkosc = % d !",predkosc); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); clear_to_color( bufor, makecol( 0, 255, 0 ) ); pixel_y++; if( pixel_y == 550 ) pixel_y = 0; while( speed > 0 ) { if( key[ KEY_DOWN ] ) predkosc += 1; if( key[ KEY_UP ] ) predkosc -= 1; if( predkosc < 0 ) predkosc = 0; if( predkosc > 95 ) predkosc = 95; speed--; } if( key[ KEY_LEFT ] ) obraz_x--; if( key[ KEY_RIGHT ] ) obraz_x++; rest( predkosc ); }
remove_int( increment_speed );
|