[allegro] uzycie timer'a

0

witam wszystkich goraco:) ot taki sobie kod mam:

//do timera--------------------------------------------------------------------
LOCK_VARIABLE(x);
LOCK_FUNCTION(timer);

void timer()
{ x++; }
END_OF_FUNCTION(timer);

//wlasciwa funkcja--------------------------------------------------------------
void obnizenie()
{
static int licznik;
install_timer();

   if( rzad_rotowania != 100 )
   {
       for(rzad_rotowania; rzad_rotowania<20; rzad_rotowania++)
       {
               for(int i = 0; i<10; i++)
               {
                       if(tablica_x[rzad_rotowania][i] != 12 )
                       { licznik++; }
                       
                       if( licznik == 10 )
                       {  
                          install_int(timer,3);
                          while( x != 601 ) //dlaczego raz wychodzi poza petla a raz w niej zostaje?
                          { 
                          rectfill(screen, 300, rzad_rotowania*30+1, x, (rzad_rotowania+1)*30-1, 255);
                          if(x==601) { remove_int(timer);}
                          }
                       }
               }
          x=300;    
          licznik = 0;     
}}}

chodzi o ta petle while(x != 601), x podnosze za pomoca timera. problem w tym ze raz wsyztsko ladnie sie wykona, raz pozostanie w petli na wieki. rozumiem ze cos nie tak musi byc wlasnie z tym timerem ale nie mam zielonego pojecia co. nie mam doswiadczenia w jego uzywaniu i pewnie cos pominalem. no wiec koledzy w kodowaniu jak to powinno wygladac? z gory wielkie dzieki za pomoc [browar]

0

Na moje oko to podczas rectfill(...) wywoływane jest przerwanie /x jest inkrementowany/ i dochodzi do 'przeoczenia' wartości 601 - warunek pętli nie jest na to odporny. Nie wiem po co wewnątrz while'a ten if - nie lepiej po zakończeniu\wyjściu z pętli wywołać remove_int(...)? Podsumujmy:

if (licznik == 10)
{
        install_int (timer, 3);

        while (x < 601) /* odporne na przekroczenie */
              rectfill (screen, 300, rzad_rotowania*30+1, x, (rzad_rotowania+1)*30-1, 255);

        remove_int (timer);
}

w sumie cały kod raczej napisałbym inaczej ale... teraz powinno chodzić ;)

0

wstepnie przetestowalem i wyglada na to ze zeczywiscie w tym lezal problem. nie rozumiem tego jednakze :) skoro x inkrementuje co jeden to przeciez nie jest mozliwe zeby jaos "przeoczyc" wartosc 601. tak czy siak dzieki wielkie ;-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1