Animationの完成
Animationの実装
今までの実装では時間の取得の仕方が間違っていた。
時間の表示を正常にするとコマ飛びすることなくアニメーションが表示された。
時間の取得方法
実装当初に色々調べた際に、あまり深く調べることなく以下のstack overflowのanswerをそのまま流用していた。
How to get the current time in native Android code? - Stack Overflow
#include
// from android samples
/* return current time in milliseconds */
static double now_ms(void) {struct timespec res;
clock_gettime(CLOCK_REALTIME, &res);
return 1000.0 * res.tv_sec + (double) res.tv_nsec / 1e6;}
しかしコメント文にあるように、このコードではミリセカンドの単位で時間が取得できる。
アニメーションを行うときにはセカンドの単位で表示していたので、1000倍の速さについていけずコマ飛びしていた。
timespec構造体
仕様は以下に書かれてある。
cpprefjp.github.io
tv_sec エポックからの経過秒。値は0以上 tv_nsec ナノ秒単位で表される秒未満の値 値の範囲は[0, 999'999'999]
tv_nsecはナノセカンドの単位で整数値で取得されるので、を掛ける必要がある。
つまり clock_gettime を実行したときの時刻tは
double t = res.tv_sec + res.tv_nsec / 1e9;
で取得できる。