入门教程

Timer 定时器

定时器可以每隔一段时间自动执行一次指定的函数,使用定时器之前,应先写一个函数,让定时器去执行它。

1
2
3
4
5
6
// 写一个移动精灵的函数
void MoveSprite()
{
// 将精灵向右方移动 1 像素
sprite->movePosX(1);
}

然后创建一个定时器,让它不断的执行 MoveSprite 函数,这样精灵就会不断向右方移动。

1
2
// 创建定时器,它可以自动执行 MoveSprite 函数
Timer::add(MoveSprite);

这个定时器会在每帧画面渲染时执行,而且永远不会停下来,除非你在某个地方调用了它的stop函数。

也可以使用lambda函数来创建定时器:

1
2
3
4
Timer::add([=]() {
// 将精灵向右方移动 1 像素
sprite->movePosX(1);
});
Tips

lambda的使用方法请参考 [关于回调函数]

Timer::add()函数的第二和第三个参数可以指定定时器的执行间隔和执行次数。

1
Timer::add(MoveSprite, 0.5f, 5);   // 每 0.5 秒执行一次,且执行 5 次后结束
Warning

如果你创建了一个不会停止的定时器,那么切换场景后它仍在运行,所以你需要注意何时停止定时器。

Timer::add() 的第四个参数可以指定创建的定时器是否是暂停状态,第五个参数可以给定时器命名,有了名称的定时器可以管理其启动和暂停。

1
Timer::add(MoveSprite, 0.5f, 5, false, "move_timer");   // 启动后不暂停,且定时器名称为 move_timer
Tips

Timer 可以控制全局的定时器,例如使用下面的代码停止一个指定的定时器
1
Timer::stop("move_timer");   // 停止所有名称为 move_timer 的定时器