Cocos2dx:使用定时器

在Cocos2dx中,定时器也被称为调度器.英文为Schedule.是用来实现一些定时相关的功能.

定时器一共有三种实现方式:
1.void scheduleUpdate(); //帧定时器.
2.scheduleOnce(); //单次定时器.
3.schedule(); //自定义定时器.

1.scheduleUpdate
这个是帧定时器,也就是说每帧都会触发一个函数,而这个函数不是用户自定义的,而是需要重写virtual void update(float ft);这个方法,注意!参数不要忘记.参数代表每帧的时间,理论上每帧的时间是相等的,但是实际打印出来还是会有一些误差,会围绕这个时间上下波动.

那么如何开启这个帧定时器呢?我们只需要在需要该定时器的地方写上这么一句:

//帧定时器就立马启动了.
scheduleUpdate();
//重写update方法.
void HelloWorld::update(float ft)
{
    log("%f",ft);
}

但是心细的同学可能会发现,你的打印和我的打印可能不太一样啊..为什么我们每帧的时间是大不相同的.

//打印结果.
0.099775
0.099767
0.100295
0.099833
0.100240
0.099768
0.099976

这是因为帧率我们是可以进行认为设置的.还记得AppDelegate这个类中吗.其中设置了 director->setAnimationInterval(1.0f / 60);也就是帧率是:每秒60次.据研究发现,人眼在每秒60帧时,可以达到最佳效果.

//而我设置为了每秒10次.
Director::getInstance()->setAnimationInterval(1.0f/10);
//我们也可以通过导演获得当前的帧率.
Director::getInstance()->getAnimationInterval();

定时器开启了,我们该如何去注销呢?

//对于帧定时器来说,由于只有一个,所以直接注销即可.
unscheduleUpdate();

2.scheduleOnce
单次定时器,和你想的一样,到达指定时间后,调用一次回调方法后就不再启用了.

//这里我们设置了0.5秒后选择调用callBackPrintLog方法.但是我不太喜欢这样:
scheduleOnce(CC_SCHEDULE_SELECTOR(HelloWorld::callBackPrintLog), 0.5f);

//第二个重载函数.在3.0版本中,新定义了CC_CALLBACK_0等宏来通用的表示回调函数,而后面的数字则表示回调函数的参数.还有CC_CALLBACK_1,CC_CALLBACK_2,CC_CALLBACK_3等等.最后的参数表示建值,我们可以通过键值来注销定时器.

scheduleOnce(CC_CALLBACK_1(HelloWorld::callBackPrintLog, this), 0.5f, "single");

注销.

//注销键值为single的定时器.
unschedule("single");
//不过这样写也没有问题.
unschedule(CC_SCHEDULE_SELECTOR(HelloWorld::callBackPrintLog));

3.schedule
自定义定时器.多次执行指定方法,时间自定义.

//创建定时器.
schedule(CC_CALLBACK_1(HelloWorld::callBackPrintLog, this), 1.0f, "single");

void HelloWorld::callBackPrintLog(float ft)
{
    log("%f",ft);
}

注销方式和单次定时器一样,这里就不再赘述了..值得一提的是:cocos中还存在一些庞大的注销定时器的方法:但是如果不是解决不了的话,最好不要随便用..这两个方法的功能一样:都是注销所有定时器的作用.

1.unscheduleAllCallbacks();
2.unscheduleAllSelectors();

cocos2dx中的定时器内容大致就是这些了~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值