mam taki problem ze potrzebuje zatrzymac wykonywanie programu na jakis czas zeby gra dzialala wolniej.
i teraz jest problem taki ze jak dam np sleep(1000); to lipa bo compilator sie oburza a przeciez powinno to zadzialac:
to jest prosciutka gierka wiec jest jeden glowny watek, wsumie moglbym zrobic petle while(i<10000)i++;
Jesli robisz to pod konsola windowsowa to mozesz sobie zrobic "minibiblioteke":
#ifndef _SLEEP_HPP_
#define _SLEEP_HPP_
#include <windows.h> // dla WINBASEAPI void WINAPI Sleep(DWORD)
namespace dx {
// void delay(unsigned msec)
// powoduje wstrzymanie pracy programu na "msec" milisekund
void delay(unsigned msec) {
::Sleep( (DWORD)msec );
return;
}
// void sleep(unsigned sec)
// powoduje wstrzymanie pracy programu na "sec" sekund
void sleep(unsigned sec) {
::Sleep( (DWORD)sec*1000 );
return;
}
// -----------
} // koniec namespace dx
Bedziesz mial wtedy dwie funkcjedo sterowania czasem...
kamiseq napisał(a)
mam taki problem ze potrzebuje zatrzymac wykonywanie programu na jakis czas zeby gra dzialala wolniej.
i teraz jest problem taki ze jak dam np sleep(1000); to lipa bo compilator sie oburza a przeciez powinno to zadzialac:\
Pod czym piszesz? Jesli windows, to dołącz <windows.h> i Sleep(1000) - z wielkiej litery!
Jesli Linux, to <unistd.h> i sleep(1).
to jest prosciutka gierka wiec jest jeden glowny watek, wsumie moglbym zrobic petle while(i<10000)i++;
Nie. To nie o to chodzi, że jeden wątek, tylko że niepotrzebnie spowolniłbyś pracę innych aplikacji i dodatkowo zwiększył zużycie energii. Pomyśl o tych, co będą grać na laptopach (np. jadąc w pociągu).
Wlasciwie to blad, ze nastapil taki problem.
Powinienes tak skonstruowac petle glowna zeby byla wykonywana
jak najwieksza ilosc razy na sekunde, a kazda akcje w grze uzaleznic
od czasu poprzedniej akcji, a nie wykonywac 'jak leci' (nie dotyczy wyswietlania grafiki ;>).
W ten sposob ustawiajac jedna zmienna mozesz regulowac predkosc gry.