Jump to content

  • Log In with Google      Sign In   
  • Create Account

Frame Limiter


Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
7 replies to this topic

#1 Smack0007   Members   -  Reputation: 157

Like
Likes
Like

Posted 27 August 2000 - 04:51 AM

How do you limit the frames your program outputs so that the way the game looks on one machine is the same on another? Do you simply limit the input scans or do you auctally make it where the program can only push x amount of frames per second? zac@qisfl.net
Snowsoft Online
I don't pretend to know anything.

#2 Julio   Members   -  Reputation: 116

Like
Likes
Like

Posted 27 August 2000 - 05:25 AM

a common method to limit frames is to install a timer and regulate the frames based off of the timer. but if you just want the program to run the same speed on every computer I would recomend frame based modeling. this is basically where you time how long it takes to draw the scene and use this time (delta) to base how much to move the objects. like this:
time1=timeGetTime();
drawscene();
time2=timeGetGime();
delta=time2-time2;
obj+=0.1f*delta;

JoeMont001@aol.com www.polarisoft.n3.net

#3 BitMaster   Crossbones+   -  Reputation: 7719

Like
Likes
Like

Posted 27 August 2000 - 05:30 AM

The QueryPerformanceCounter function can do the same only at higher resolution. Call QueryPerformanceFrequency to get the frequency.

#4 Julio   Members   -  Reputation: 116

Like
Likes
Like

Posted 27 August 2000 - 05:44 AM

ya, also QueeryPerformanceCounter is a lot more accurate than timeGetTime(). QPC returns microseconds, so you''ll have to convert to milliseconds, not too tough.

JoeMont001@aol.com www.polarisoft.n3.net

#5 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 01 September 2000 - 11:40 AM

QueryPerformanceCounter *does not* return time in microseconds or any other predictable unit. It just returns the value of a counter. Use QueryPerformanceFrequency to get the counts per second as BitMaster pointed out.


#6 Julio   Members   -  Reputation: 116

Like
Likes
Like

Posted 01 September 2000 - 05:02 PM

quote:

QueryPerformanceCounter *does not* return time in microseconds


are you sure? I''ve heard otherwise from someone who used it as his timer for his 3d engine. and it works.

JoeMont001@aol.com www.polarisoft.n3.net

#7 Melo   Members   -  Reputation: 122

Like
Likes
Like

Posted 02 September 2000 - 12:07 AM

I am using this FrameRate-limiter in my small games:


DWORD LastTime;
const DWORD Speed_Value = 50; // The higher, the slower

while (1) //Main loop
{
LastTime = timeGetTime ();
GameStuff ();
while (timeGetTime () < LastTime + Speed_Value)
{
// Do something useful
}
}


Works fine

- - - - - - - - - - - - - -
Andreas Mähler
Wolf359 Interactive


#8 gimp   Members   -  Reputation: 142

Like
Likes
Like

Posted 02 September 2000 - 01:23 AM

All good advise but you''ll get in to trouble with all of them. You said that you wanted to use this to sync different pcs.

Be very carful about this. THink about how this would work. Just say you have 32 players connected. What happens if one players has a peice of shit for a PC and can''t maintain the frame rate? Or if a big battle ensue''s? or .. etc...

Take a slightly different tact. Seperate you frame rate from the input event system.

Think about this. Only sample your mouse/keyboard at a certain rate. For example 50 ms. Then let your frame rate run at whatever it wants to(either locked or open like quake, whatever you want). The at each 50ms interval you grab the movements, act on them and send off the network packets. This way if you hit a slow pocket because everyone piles in to one room your movement\network layer in unaffected by the slowdown, ditto with diferent speeded pc''s.

(This is a very basic example. Once you get it, think about running the network\input in a different thread with a timing delay loop. Also think about using input events, like DirectX''s buffered input or SDL''s events. That way no matter what interval you pick you always get ALL keypresses.)

HTH

gimp

(oh, and for info on QueryPerformaceCounter check the general programming forum. I gets ansered about evey week. Also check flipcode "Code of the day for some nice classes")




Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.




PARTNERS