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;
}
改了计时函数后,游戏各个场景都流畅了。