|
发表于 2011-4-30 20:57:00
|
显示全部楼层
Re: Re:如何控制帧率?
snhun: Re:如何控制帧率?
用Sleep()控制?
控制为多少秒呢? 1/100秒 还是 1/60秒?
这才是问题的关键。因为两台机器的刷新频率不一样。
如何让同一个代码在不同刷新率的PC上各自以正常刷新率运行。
想控制多少秒就控制多少秒,跟显示器无关:
- void CGameApp::Run()
- {
- MSG msg;
- ZeroMemory(&msg, sizeof(msg));
- int constFps = 40;
- float timeInOneFps = 1000.0f/constFps; // 每秒60帧,则1帧就是约16毫秒
- DWORD timeBegin;
- DWORD timeTotal;
- while (msg.message != WM_QUIT)
- {
- if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- timeBegin = timeGetTime();
- // 执行游戏逻辑部分
- g_pInput->UpdateBufferInput(&g_stInputInfo);
- MainLoop();
-
- timeTotal = timeGetTime()-timeBegin;
- if (timeTotal < timeInOneFps)
- {
- float timeSleep = timeInOneFps-timeTotal;
- Sleep(DWORD(timeSleep));
- }
- }
- }
复制代码
就是让他一帧只能执行多少毫秒,是控制时间的.
另外:
1:我并不能保证我的这个方案是对的,或者说是你所需要的.
2:一般开了垂直同步,应该每个机器都是相同的,因为是按时间的,不是按执行速度,如果我理解有偏差的话,那我就想不到是什么情况了。 |
|