Tips and tricks - ClanLib Game SDK

#

## Tips and tricks

### Calculating frames per second (fps)

Author: Sphair

Often you want to know how fast or slow your game is running, and displaying a FPS counter can be a handy debug-tool.

    class Game
    {
    public:
    	void run();
    	void update();
    	void draw();

    	int calc_fps(int frame_time);

    	CL_Font font_fps;
    	int fps;
    };

    void Game::run()
    {
    	CL_ResourceManager resources("resources.xml");
    	font_fps = CL_Font("font_gray", &resources);

    	while(!CL_Keyboard::get_keycode(CL_KEY_ESCAPE))
    	{
    		update();
    		draw();

    		CL_Display::flip();
    		CL_System::keep_alive();
    	};
    }

    void Game::update()
    {
    	// Calculate time since last update
    	static int start_time = CL_System::get_time();

    	int cur_time = CL_System::get_time();
    	int delta_time = cur_time - start_time;
    	start_time = cur_time;

    	fps = calc_fps(delta_time);
    }

    int Game::calc_fps(int frame_time)
    {
    	static int fps_result = 0;
    	static int fps_counter = 0;
    	static int total_time = 0;

    	total_time += frame_time;
    	if(total_time >= 1000)	// One second has passed
    	{
    		fps_result = fps_counter + 1;
    		fps_counter = total_time = 0;
    	}
    	fps_counter++;	// Increase fps

    	return fps_result;
    }

    void Game::draw()
    {
    	CL_Display::clear();

    	font_fps.draw(0, 0, "fps: " + CL_String::from_int(fps));
    }

Questions or comments, write to the ClanLib mailing list.