Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.


Frame rate independent movement

This topic is 5236 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m currently trying to do make particle system but i''ve come to a problem which i''ve come across many times before - they move insanely fast unless I have ridiculously low values. I would like to be able to have reasonable values as opposed to something like 0.0001f for speed I have my camera moving relative to the frame rate but i''ve never quite been able to figure out how to have things update based on the frame rate unless you press a button (eg. moving camera). Any help is much appreciated

Share this post

Link to post
Share on other sites
I was trying to do that earlier but I calculate my framerate in the camera code when it's updated and I use a variable called frameInterval (for the time between frames) but when I try to use this variable in other files (my particle code for instance) I get errors saying that it's already been defined in the camera code.

Any ideas on how to get around this?

[edited by - Theriomorph on March 19, 2004 3:52:16 AM]

Share this post

Link to post
Share on other sites
In the source file, where you measure the time, you define frameInterval:

int frameInterval;

Now, in every source file, where you want to use frameInterval too, you say:

extern int frameInterval;

Share this post

Link to post
Share on other sites
I would suggest making the timer seperate from the camera
this is the timer I made using that gamedev article

class CTimer


double m_Frequency;

__int64 m_StartClock;

float m_FrameTime;
float m_FrameStart;
float m_FrameEnd;

float m_FpsLimiter;
float m_Fps;


float GetFrameTime() { return m_FrameTime; }

float GetFps() { return m_Fps; }

double GetTime();

void Init();
void Update();


#include <windows.h>
#include "timer.h"

double CTimer::GetTime()
__int64 EndClock;


return (double)(EndClock-m_StartClock)*m_Frequency;

void CTimer::Init()
__int64 rate;

// Get the performance frequency


// Invert it so we can multiply instead of divide

m_Frequency = 1.0/(double)rate;

// Get the start time


m_FrameTime = 0.0f;
m_FrameStart = (float)GetTime();
m_FrameEnd = 0.0f;
m_FpsLimiter = 0.0f;
m_Fps = 0.0f;

void CTimer::Update()
// Cap the frame rate to the timer frequency

// The timer frequency is normally always faster than the frame rate

do {
m_FrameEnd = (float)GetTime(); // Get the end frame time

} while( m_FrameEnd == m_FrameStart);


m_FrameTime = m_FrameEnd - m_FrameStart; // Get the elapsed time

m_FrameStart = m_FrameEnd; // Set the end time to be the next start time

// Get the frames per second every 0.25 seconds

m_FpsLimiter += m_FrameTime;
if( m_FpsLimiter >= 0.25f )
m_FpsLimiter = 0.0f;
m_Fps = float(1.0/m_FrameTime);

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!