View previous topic :: View next topic |
Author |
Message |
Valdo
Joined: 01 Nov 2006 Posts: 23
|
Posted: Wed Oct 24, 2007 3:13 pm Post subject: SDL time |
|
kārtējais jautājums par sdl. Tātad man vajag panākt lai kāda darbība notiek, piemēram ik pēc 1 sekundes, luudzu paliidziet un pasakiet kaa to izdariit? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Wed Oct 24, 2007 3:39 pm Post subject: |
|
a man liekas, ka tādai vajadzībai ar sdl nav nekāda sakara...
vnk mainīgais, kuram vērtība ir piemēram 500
katrā kadrā no tā atņem tik milisekundes, cik pagājis
kad mainīgais == 0, izpildi savu darbību! _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Oct 24, 2007 3:59 pm Post subject: |
|
umņiks šnake tu esi.
Kā gan bez kautkāda taimera vai laika funkcijas, tu uzzināsi cik milisekundes ir pagājušas? No zila gaisa izrausi?
Valdo: es darītu apmēram šādi - nofiksētu kādā mainīgajā (previous) patreizējo laiku (SDL_GetTicks funkcija). Tajā vietā, kur vajadzīga tā darbība pēc sekundes liktu aptuveni šādu te kodu:
Code: | Uint32 current = SDL_GetTicks();
if (current - previous >= 1000) // laiks milisekundēs
{
// darīt kautkādu darbību
// ...
previous = current; // reseto laiku
} |
|
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Wed Oct 24, 2007 11:25 pm Post subject: |
|
bubu tavā piemērā neesi paredzējis vienu lietu - ko darīt, ja ir pagājušas vairākas sekundes un darbību vajag izpildīt precīzi 1 reizi sekundē.
Labāk šāds variants:
Code: |
Uint32 ticksSinceLastFrame = SDL_GetTicks() - last; //dabujam, cik laika pagajis no ieprieksheja freima
last = SDL_GetTicks(); //saglabajam tagadejo laiku
time+=ticksSinceLastFrame;
while(time >= 1000) //ja ir pagajushas 1000 vai vairak milisekundes
{
// darīt kautkādu darbību
// ...
time -= 1000;
} |
_________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Oct 24, 2007 11:30 pm Post subject: |
|
Nu parasti tad tas nozīmē, ka spēle velkas un normāli nekas neies. arī ar tādu while ciklu.
Bet ja šo pārbaudi nav paredzēts izsaukt vairākas reizes sekundē, tad jā - jālieto tavs variants. |
|
Back to top |
|
|
freedom
Joined: 06 May 2007 Posts: 9
|
Posted: Thu Oct 25, 2007 12:18 am Post subject: |
|
ēēm, a neiet tā lieta vnk cauri ar SDL_Delay(laiks milisekundēs); |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Oct 25, 2007 12:41 am Post subject: |
|
Gan jau, ka autors to vienu sekundi grib kādas citas lietas darīt. Piemēram, grib lai durvis spēlē aiztaisās pēc sekundes, tachu pats spēlētājs lai var kustēties tai laikā. SDL_Delay šajā gadījumā apstādinas programmas darbu vispār - nenotiksies nekas (ja vien netiek lietots multithreadings, par ko es stipri šaubos). |
|
Back to top |
|
|
|