![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
![]() |

|
| Programming Error ! Programming error messages |
![]() |
|
Frames per Second FPS
|
LinkBack | Thread Tools | Display Modes |
|
|
#1 (permalink) |
|
Fixed Error!
Posts: 4,202
Join Date: Mar 2007
Rep Power: 6
IM:
|
my question is mainly about the frames per second, i must run at 60 or 100 fps ( I mean fixed frames per second depending on the user input), and i am doing it this way... #define m_iUpdateInterval 10 // in case of 100 fps , is this right? and in case of 50 it would be #define m_iUpdateInterval 20 int timeToNextUpdate; int main(int argc, char *argv[]) { // //some SDl initilizazion goes here //and timeToNextUpdate = 0; bool done = false; While(!done) { //catch events..... //do something //NOW THE QUESTION SDL_Flip(screen); SDL_Delay( timeLeft() ); } return 1; } timeLeft(void) { Uint32 currentTime; currentTime = SDL_GetTicks(); if( timeToNextUpdate <= currentTime ) { timeToNextUpdate = currentTime + m_iUpdateInterval; return 0; } return(timeToNextUpdate - currentTime); } is it the right way to do it?( If it is right at all....) (125 points) This thing deals with times…so how can I decide the speed of my object for example (125 points) any explanation of how is this done is most welcome |
|
|
|
|
|
|
|
|
#2 (permalink) |
|
Fixed Error!
Posts: 4,202
Join Date: Mar 2007
Rep Power: 6
IM:
|
1. you can't use 'delay' code to guarantee framerate will ACHIEVE 60 or 100fps. if you run slower, you run slower... not much you can do there. Now, that's also different from wanting to FLIP on a 60Hz or 100Hz 'boundary' of time, which using VSYNC would help with. 2. your delay code should keep a static that is 'start of world time', and base everything from there. 3. you timeLeft isn't quite right. If you really want to delay AND sync moving forward, try: while (currentTime >= timeToNextUpdate) // using while guarantees we'll 'catch up' if a frame runs really late... timeToNextUpdate += m_iUpdateInterval; // increment to next interval based off whatever world start time was 4. speed of objects should all be in UNITS PER SECOND. Meters. Feet. Whatever. Then, you would either use a per-frame constant for time (that is 1/Hz, which is 1/60th or 1/100th of a second) and multiply times u/s, OR when your 'physics' update runs, you calculate the delta time since the LAST physics update, and use that as your multiplier. But everything is done based on some delta between frames, and some speed per second value. Also note that if your delay 'runs late', and you 'catch up', you MUST use delta time between frames and not a per-frame constant. i.e., if you miss a frame, your delta isn't still 1/60th, it's 2/60ths (or more..) for that frame's physics run. That make sense? |
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|