[Allegro 5] Pętla kontrolowana przez czas nie wykonuje instrukcji
Ostatnio zmodyfikowano 2012-09-12 19:08
bingo009 Temat założony przez niniejszego użytkownika |
[Allegro 5] Pętla kontrolowana przez czas nie wykonuje instrukcji » 2012-09-09 12:56:00 Witam was serdecznie, próbowałem zrobić pętle kontrolowaną przez czas, ale coś nie wyszło. Mianowicie pętla blokuje ruch mojego gracza. Oto kod: Deklaracja zmiennych: const int FPS = 60; double starttime = 0; double endtime = 0; short int counts = 0;
Przed pętlą główną pobieram czas do zmiennej starttime, przez funkcję al_get_time(). A oto ta kłopotliwa pętla(umieszczona w pętli głównej na końcu): while( 1 ) { if( starttime - endtime == 1.0 ) { starttime = al_get_time(); counts = 0; break; } if( counts == FPS ) break; endtime = al_get_time(); if( al_key_down( & key_state, ALLEGRO_KEY_RIGHT ) ) ++PLAYER0.x; if( al_key_down( & key_state, ALLEGRO_KEY_LEFT ) ) --PLAYER0.x; ++counts; }
Mógłbym spowolnić całą pętlę główną, ale zależy mi na tym, aby były takie jakby 2 pętle. Jedna normalna, wykonuje obliczenia tak szybko, jak pozwala na to procesor, a inna, kontrolowana przez czas(do ruchu, strzelania). O co tutaj chodzi? Z góry dzięki za pomoc. |
|
pekfos |
» 2012-09-09 13:22:03 if( starttime - endtime == 1.0 )
zamień na if( starttime - endtime >= 1.0 )
|
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-09-09 13:24:36 Nic to nie dało. |
|
pekfos |
» 2012-09-09 13:33:01 Przypisuj endtime przed pierwszym warunkiem w pętli. |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-09-09 13:39:24 Niestety, dalej nic. Nie mam pojęcia, co może być nie tak. Pętla wydaje się dobra. |
|
pekfos |
» 2012-09-09 13:44:47 |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-09-09 14:11:29 Działa, choć nie dokońca, zamiast płynego ruchu otrzymuje skokowy. |
|
Gabes |
» 2012-09-09 20:11:14 double czas = al_get_time(); while( 1 )
{ al_get_keyboard_state( & key_state ); if( al_get_time() > czas + 0.01 ) { if( al_key_down( & key_state, ALLEGRO_KEY_RIGHT ) ) ++PLAYER0.x; if( al_key_down( & key_state, ALLEGRO_KEY_LEFT ) ) --PLAYER0.x; czas = al_get_time(); } al_clear_to_color( al_map_rgb_f( 0.5, 0.5, 0.5 ) ); al_draw_bitmap( hero, x, y, 0 ); al_flip_display(); } |
|
« 1 » 2 |