AWTK 计时器篇
一,前序
在许多的 GUI 或者 3D 引擎中,都会有一个概念这个概念就是计时器,而计时器就是用户开辟一个闹钟来定时定后的来通知告诉玩家时间到了,该干点什么事情了。
其实计时器是一个很常用的功能来的,例如定时刷新帧率,某个时间点触发事件等,所以接下来我们来介绍一下 AWTK 的计时器,这里我打算通过计时器来简单做一个控件移动动画(当然做其他的效果也是可以的,这里只是为了简单介绍计时器),其实所有 GUI 的动画都是通过计时器来做的(而 AWTK 也有动画系统,主要是方便用户直接使用动画而已,本质也是通过计时器来实现的),话不多说了,我们开始看看计时器用法吧。
二,了解计时器
其实计时器有三个主要的部分,一个就是触发事件,一个是触发时间和一个是否连续触发,而 AWTK 提供的 API 其实也是很简单的:
/* awtk/src/tkc/timer_info.h */
/**
* @class timer_info_t
* @parent object_t
* @annotation ["scriptable"]
* 单个定时器的信息。
*
*/
struct _timer_info_t {
object_t object;
/**
* @property {timer_func_t} on_timer
* @annotation ["readable"]
* 定时器回调函数。
*/
timer_func_t on_timer;
/**
* @property {void*} ctx
* @annotation ["readable", "scriptable"]
* 定时器回调函数的上下文
*
*/
void* ctx;
/**
* @property {uint32_t} id
* @annotation ["readable", "scriptable"]
* 定时器的ID
*
* > 为TK\_INVALID\_ID时表示无效定时器。
*/
uint32_t id;
/**
* @property {uint64_t} now
* @annotation ["readable", "scriptable"]
* 当前时间(相对时间,单位为毫秒)。
*
*/
uint64_t now;
/**
* @property {uint64_t} start
* @annotation ["readable"]
* 起始时间(相对时间,单位为毫秒)。
*
*/
uint64_t start;
/**
* @property {uint32_t} duration
* @annotation ["readable"]
* 时间间隔(单位为毫秒)。
*
*/
uint32_t duration;
/**
* @property {tk_destroy_t} on_destroy
* @annotation ["readable"]
* 定时器销毁时的回调函数。
*/
tk_destroy_t on_destroy;
/**
* @property {void*} on_destroy_ctx
* @annotation ["reada