Android游戏计时

Android游戏计时
Read this post in english: http://androgeek.info/?p=299

以前代码经验很多都是基于windows的,所以对android下面的计时函数不是太了解。

在写 Friut3D时,我用的代码是用gettimeofday()来计时的。但是效果不好,游戏里有个场景跑起来十分卡,acepig兄和我都觉得这个问题很诡异。开始觉得这是模型的问题,现在看来是计时函数不精确惹得祸。

看看当时写的获取系统时间的代码:

static   long  getTime( void )

{
gettimeofday(
& now, NULL);
return  ( long )(now.tv_sec * 1000   +  now.tv_usec / 1000 );
}


今天在一个google讨论组里得知gettimeofday()记得的tick是不准确的。而这个游戏逻辑依赖于time delta来计算各个物体运动,计时不精确,渲染自然会卡顿。

于是用纳秒级的准确度的clock_gettime()重写了getTime()函数:

static   long  _getTime( void )

{
struct  timespec now;
clock_gettime(CLOCK_MONOTONIC, 
& now);
return  now.tv_sec * 1000000   +  now.tv_nsec / 1000 ;

}


改了计时函数后,游戏各个场景都流畅了。

你可能感兴趣的:(Android游戏计时)