Read this post in english:
http://androgeek.info/?p=299
以前代碼經(jīng)驗(yàn)很多都是基于windows的,所以對(duì)android下面的計(jì)時(shí)函數(shù)不是太了解。
在寫
Friut3D時(shí),我用的代碼是用gettimeofday()來計(jì)時(shí)的。但是效果不好,游戲里有個(gè)場景跑起來十分卡,acepig兄和我都覺得這個(gè)問題很詭異。開始覺得這是模型的問題,現(xiàn)在看來是計(jì)時(shí)函數(shù)不精確惹得禍。
看看當(dāng)時(shí)寫的獲取系統(tǒng)時(shí)間的代碼:
static long getTime(void)
{
gettimeofday(&now, NULL);
return (long)(now.tv_sec*1000 + now.tv_usec/1000);
}
今天在一個(gè)google討論組里得知gettimeofday()記得的tick是不準(zhǔn)確的。而這個(gè)游戲邏輯依賴于time delta來計(jì)算各個(gè)物體運(yùn)動(dòng),計(jì)時(shí)不精確,渲染自然會(huì)卡頓。
于是用納秒級(jí)的準(zhǔn)確度的clock_gettime()重寫了getTime()函數(shù):
static long _getTime(void)
{
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
return now.tv_sec*1000000 + now.tv_nsec/1000;
}
改了計(jì)時(shí)函數(shù)后,游戲各個(gè)場景都流暢了。