05/19/2020
性能计时器
目的
要正确的实现动画效果,我们必须记录时间,尤其是要精确测量动画帧之间的时间间隔。当帧速率高时,帧之间的时间间隔就会很短,所以需要一个高精确度计时器。
应用
- 平滑移动
- 动画
说明1:高精度
例子1:
#include <window.h> //WIN32 计时器
__int64 currCounts; //高精度计时器需要精度高的:64位
QueryPerformanceCounter((LARGE_INTEGER*)&currCounts); //单位:计数,获得当前每秒的计数,又叫频率
double mSecondsPerCount = 1.0 / (double)currCounts; // 单位:秒,每次计数的时间长度
例子2:
__int64 A =0;
QueryPerformanceCounter((LARGE_INTEGER*)&A);
__int64 B =0;
QueryPerformanceCounter((LARGE_INTEGER*)&B);
double deltaTime = (B-A)* mSecondPerCount; //两个时间点间隔时间,单位:秒
实现计时器
GameTimer 类头文件
class GameTimer
{
public:
GameTimer();
float getTotalTime()const; //总游戏时间
float getDeltaTime()const; //帧间隔时间
void reset(); //在消息循环之前调用,重置
void start(); //取消暂停时调用
void stop(); //暂停
void tick(); //每一帧的时候调用
private:
double mSecondsPerCount;
double mDeltaTime;
__int64 mBaseTime; //起点
__int64 mPausedTime; //暂停多久(start-stop)
__int64 mStopTime; //暂停点
__int64 mPrevTime; //上一次时间
__int64 mCurrTime; //当前时间