DX11(一)-性能计时器

本文档介绍了在DirectX11中如何创建一个高精度的游戏计时器,用于确保平滑的动画效果。内容涵盖计时器的目的、应用、高精度的重要性,以及GameTimer类的详细实现,包括Tick函数、帧统计和游戏时间的管理,旨在提供稳定且连贯的游戏体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;		//当前时间

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值