帧率限制 与 FPS显示

int CApp::OnExecute()
{
	// Initialize application.
	int state = OnInit();
	if (state != APP_OK) {
		return state;
	}
	
	// Enter the SDL event loop.
	SDL_Event event;

    running = true;
    fps     = true;
    
    static int last_time = 0;
    static int real_FPS;
    static int good_FPS;
    int show_fps_flag = 0;
    
    while (running)
    {
        while (SDL_PollEvent(&event)) {
            OnEvent(&event);
        }
        if (SDL_GetTicks() - last_time != 0)
        {
            real_FPS = 1000 / (SDL_GetTicks() - last_time);
            good_FPS = real_FPS / 20 + good_FPS * 19 / 20;
        }
        else
        {
            real_FPS = 1000;
            good_FPS = 50 + good_FPS * 19 / 20;
        }
        if(real_FPS <= FPS)
        {
            last_time = SDL_GetTicks();
            if (fps == true)
            {
                if(real_FPS != 0)
                {
                    if(show_fps_flag++ * 10 / real_FPS != 0)
                    {
                        printf("FPS:%d\n", good_FPS);
                        show_fps_flag = 0;
                    }
                }
                else
                {
                    printf("FPS:%d\n", good_FPS);
                    show_fps_flag = 0;
                }
            }
            OnUpdate();
            OnRender();
        }
    }
	
	return state;
}

对事件操作不限制FPS,对Update和Rander每帧更新。

本来想显示在窗口左上角,无奈SDL扩展库ttf还没有弄清楚如何在 osX 上实现,暂时先显示在输出端。

由于都是用 int 计算,所以真·FPS的数值分布是1000,500,333,250,200,166......非常难受,所以我使用了均值抹匀了FPS,使其看起来不会跳得太快,又因为每帧都显示看起来太瞎眼,所以设定为每10帧显示一次。

防止除数为零,做了if else判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值