dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

SDL time

 
dev.gamez.lv Forum Index -> Iesācējiem
View previous topic :: View next topic  
Author Message
Valdo



Joined: 01 Nov 2006
Posts: 23

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
freedom



Joined: 06 May 2007
Posts: 9

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Iesācējiem All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group