Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro 5] Pętla kontrolowana przez czas nie wykonuje instrukcji

Ostatnio zmodyfikowano 2012-09-12 19:08
Autor Wiadomość
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:
C/C++
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):
C/C++
while( 1 )
{
    if( starttime - endtime == 1.0 )
    {
        starttime = al_get_time();
        counts = 0;
        break;
    }
   
    if( counts == FPS ) break;
   
    endtime = al_get_time();
   
   
    //Time controlled code
    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.
P-64686
pekfos
» 2012-09-09 13:22:03
C/C++
if( starttime - endtime == 1.0 )
zamień na
C/C++
if( starttime - endtime >= 1.0 )
P-64687
bingo009
Temat założony przez niniejszego użytkownika
» 2012-09-09 13:24:36
Nic to nie dało.
P-64688
pekfos
» 2012-09-09 13:33:01
Przypisuj endtime przed pierwszym warunkiem w pętli.
P-64691
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.
P-64692
pekfos
» 2012-09-09 13:44:47
endtime - starttime
 :P
P-64694
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.
P-64699
Gabes
» 2012-09-09 20:11:14
C/C++
double czas = al_get_time();
while( 1 )
//while( !al_key_down( &key_state, ALLEGRO_KEY_ESCAPE))
{
    al_get_keyboard_state( & key_state );
    if( al_get_time() > czas + 0.01 ) //01s.
    {
        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();
}
P-64729
« 1 » 2
  Strona 1 z 2 Następna strona