[Dynamiczna gra] Odmierzanie czasu w tle
Ostatnio zmodyfikowano 2014-08-03 12:42
Dwunogalek Temat założony przez niniejszego użytkownika |
[Dynamiczna gra] Odmierzanie czasu w tle » 2014-07-19 13:02:47 Witam, Jakiś czas temu miałem problem z odmierzaniem czasu w swojej grze konsolowej w której podczas oczekiwania na klawisz program żyje swoim życiem. Dzięki pomocy użytkownika: Alixir, między innymi przeanalizowaniu jego kodu i w pełni go zrozumieniu, udało mi się go zastosować w sposób w jaki miało działać. Tylko teraz mam kolejny problem. Normalnie odmierzałem czas korzystając z zegara systemowego: time(NULL), odmierzając czas co 1 sekundę. Zauważyłem że kiedy w poniższym fragmencie różnicę dwóch czasów przyrównam do 0.5 przestaje działać, a zależy mi na przyśpieszeniu rozgrywki ? W jaki sposób mam to zrobić skoro time(NULL) zwraca tylko liczbę całkowitą przez co nie mam możliwości brania niższych wartości niż 1 sekunda ? Gdzieś widziałem sposób z clock() i CLOCKS_PER_SEC ale nie wiem jak się za to zabrać - ciężko mi idzie zrozumienie biblioteki time.h ;) KOD (fragment) int main() { char znak; int count, prev_count = time( NULL ); do { count = time( NULL ); if(( count - prev_count ) == 1 ) { } prev_count = count; if( kbhit() ) { } } while( znak != 'q' ); }
Będę wdzięczny chociaż za jakąś wskazówkę czy pomysł na inne rozwiązanie tego problemu :) |
|
rav_jarosz2 |
» 2014-07-19 13:18:17 Mógłbyś to zrobić za pomocą biblioteczki Allegro. Tam masz timery, które aktywują coś co określony czas. (Co ileś milisekund, albo ileś razy na sekundę). Robienie tego w konsoli będzie nieźle trudne. http://cpp0x.pl/kursy/Kurs-Allegro-4-x-C++/Timery/70 |
|
unkn9wn |
» 2014-07-19 13:54:14 http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-time-h/321jest i to czego szukasz clock_t – zwraca czas od kiedy program został uruchomiony Jeżeli nie ma dostępu do tej informacji funkcja zwróci wartość -1. Najwygodniej skonwertować czas który zwraca funkcja na sekundy używając CLOCKS_PER_SEC. Przykład użycia |
#include <time.h> #include <conio.h> #include <iostream>
void czekaj( int sekundy ) { clock_t koniec_czekania; koniec_czekania = clock() + sekundy * CLOCKS_PER_SEC; while( clock() < koniec_czekania ) { } }
int main() { std::cout << "Program zamknie sie za:" << std::endl; for( int i = 5; i > 0; i-- ) { std::cout << i << std::endl; czekaj( 1 ); } return 0; }
|
|
pekfos |
» 2014-07-19 14:05:57 Zauważyłem że kiedy w poniższym fragmencie różnicę dwóch czasów przyrównam do 0.5 przestaje działać, a zależy mi na przyśpieszeniu rozgrywki ? |
Jak chcesz osiągnąć 0.5, gdy odejmujesz od siebie 2 liczby całkowite? Mógłbyś to zrobić za pomocą biblioteczki Allegro. Tam masz timery, które aktywują coś co określony czas. (Co ileś milisekund, albo ileś razy na sekundę). Robienie tego w konsoli będzie nieźle trudne. |
Pchać allegro do gry konsolowej? Lista powodów, dla których można by to robić:  To by było na tyle.. |
|
Dwunogalek Temat założony przez niniejszego użytkownika |
» 2014-07-20 21:26:02 Rzeczywiście korzystanie z timerów allegro raczej nie ma sensu.
Ale z clock_t skorzystam jak tylko rozgryzę "jak to działa" ;P
Dzięki za pomoc :) |
|
unkn9wn |
» 2014-07-20 22:42:37 W sumie to funkcja clock() zwraca czas od uruchomienia programu, a clock_t to zmienna w której możesz przechować czas no i ewentualnie warto wspomnieć że clock() zwraca w milisekundach więc tworzysz sobie pętlę w której sprawdzasz czy gra nie dobiegła końca (np.: zmienną typu bool), wewnątrz tworzysz kolejną pętlę while( clock() - czasOdOstatniegoOdswiezenia >= juzCzas )
{ czasOdOstatniegoOdswiezenia = clock(); } ot tyle |
|
pekfos |
» 2014-07-21 12:59:14 no i ewentualnie warto wspomnieć że clock() zwraca w milisekundach |
Nieprawda. |
|
1aam2am1 |
» 2014-07-31 15:03:42 clock() zwraca clock_t któtr jest czasem od uruchomienia programu clock_t/CLOCKS_PER_SEC daje czas w sekundach od uruchomienia programu |
|
« 1 » 2 |