在cocos引擎游戏开发过程中经常会使用引擎自带的对象生命周期函数来处理一些计时、位移等功能。
一般的处理方法是在update(float dt)方法里用dt叠加一个float常量,这里dt为引擎两帧渲染之间的时间间隔。
但是该方法在卡帧严重的情况下,对于精度要求较高的游戏会产生比较大的误差,尤其是在处理高速运动碰撞检测的时候。
因为卡帧严重的话,帧间隔dt就会被拉大,导致叠加的数值常量会超出预期的边界值。而且此时位移等渲染也会在画面上快速闪动,体验极差。
为了应对此问题,我们尽量在update(float dt)里自己根据时间戳管理帧间隔。
代码示例如下
long long pre_time_ = getCurrentTime();
long long timer_ = 0;
void update(float dt){
long long cur_time = getCurrentTime();//需要根据平台自己实现 单位为毫秒
long long time_diff = cur_time - pre_time_;//帧间隔时间
if(time_diff > 100){
time_diff = 50;
}
timer_ += time_diff;
}
通过这种方式处理的帧间隔在跳帧的时候画面也是顺滑的。
不过这种方式处理的帧间隔不是游戏过程中实际度过的时间,所以使用时需要根据实际情况酌情使用。
关于cocos客户端跳帧的处理
最新推荐文章于 2024-08-08 16:35:01 发布