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

[allegro] czas

Ostatnio zmodyfikowano 2009-05-05 17:28
Autor Wiadomość
driver1995
Temat założony przez niniejszego użytkownika
[allegro] czas
» 2009-05-04 19:48:51
Witam...
Mam kolejny już problem z allegro... A mianowicie chcę, aby np. włączam program, pokazuje się obrazek i zaczyna grać muza (np) i po np. 30 sec obrazek się zmienia... (np,np,np ;P;P;P) Próbowałem z biblioteką <time.h>, ale coś mi nie wychodzi ;/ Może w allegro ta biblioteka nie chodzi? Proszę o pomoc. pzdr...
P-6452
GoldWolf
» 2009-05-04 20:03:46
A mógłbyś wrzucić ten kawałek kodu o którym mówisz, ja ci nie pomogę bo akurat w allegro nie pisze, ale innym chcącym ci pomóc na pewno będzie łatwiej.
P-6461
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-04 20:14:45
C/C++
void intro()
{
    time_t start, koniec;
    double roznica;
   
    time( & start );
    //coś tam
    time( & koniec );
    roznica = difftime( koniec, start );
    double aa = 31 - roznica;
    rest( aa );
}

To jest tylko jedna z moich prób (ta którą zapisałem)... Jeszcze próbowałem na parę sposobów, ale nawet jakbym chciał je napisać to mógłby być problem, bo ich nie pamiętam ;/ ;/ ;/
P-6462
GoldWolf
» 2009-05-04 20:17:57
TO wystarczy tak jest łatwiej, bo wiadomo jak się za to zabierałeś. Teraz tylko trzeba cierpliwie poczekać na odpowiednią osobę, która coś będzie umiała poradzić.
P-6463
WunM
» 2009-05-04 20:23:45
Jak umieściłeś to w Allegrowym timerze to się nie dziw ;)

Jak korzystasz z timera to korzystaj z jednego.
P-6464
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-04 20:28:46
No dobra... Miałem drugi timer... No i usunąłem go i... Dalej nie działa ;/ ;/ ;/
P-6465
WunM
» 2009-05-04 20:36:52
No dobra... Miałem drugi timer... No i usunąłem go i... Dalej nie działa ;/ ;/ ;/

Nie o to chodzi. Zapewne miałeś taką kombinację:

C/C++
//pomijam to co masz wcześniej
while( speed > 0 )
{
    //coś tam
    intro();
    //coś tam
}
//dalej tez coś...

Widzisz, timer (while(speed > 0)) działa (w zależności od szybkości jaką ustawiłeś) ileś razy na sekundę. Za każdym tym razem wszystko (co jest w pętli) leci od nowa. Twoja funkcja jest tak skonstruowana że za każdym wywołaniem pobiera aktualny czas. To powoduje że prawie nigdy nie dojdzie do takiej sytuacji że minie te 30 sekund.

Problem przedstawiony teraz możliwe rozwiązania ;) Ustaw timer np. na 100 (szybkość). Stwórz zmienną float a w pętli dodawaj do niej wartość 0.01 jeśli wartość wynosi 30 zmień obrazek a wartośc ustaw na 0.

//inne rozwiązania po przerwie....
P-6466
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-04 20:40:04
Nie... Dokładnie mój "main" wygląda tak:
C/C++
int main()
{
    allegro_init();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0 );
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
    set_volume( 255, 255 );
    intro();
    clear_to_color( screen, makecol( 0, 0, 0 ) );
    adjust_sample( behemoth, 60, 127, 1000, 1 );
    rest( 2000 );
    stop_sample( behemoth );
    destroy_bitmap( CrazyRace );
    destroy_bitmap( KG );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
ale spróbuję ten sposób z floatem ;)

//edit:

Ten sposób nie przejdzie, bo tam gdzie było w funkcji intro() "coś tam" to jest dość sporo bitmap do wczytania i jest lekkie opóźnienie, a ja bym chciał, żeby na dany moment piosenki coś się pojawiło .. ;/ ;/ ;/
P-6467
« 1 » 2
  Strona 1 z 2 Następna strona