Cocos2D-X开发学习笔记2:定时器

来源:互联网 发布:数据库研究新特点 编辑:程序博客网 时间:2024/05/07 07:31

在上节对加速度传感器的学习中,发现在实际应用中,需要设定一段时间间隔,记录开始和结束的加速度,来进行比较确定其变化。因此接下来将对定时器进行学习。

Cocos2D-X中提供了一个对象schedule,可以通过它来实现定时器的功能。
下面是一个简单的示例:

bool HelloWorld::init(){    //////////////////////////////    // 1. super init first    if (!Layer::init())    {        return false;    }    Size visibleSize = Director::getInstance()->getVisibleSize();    Vec2 origin = Director::getInstance()->getVisibleOrigin();    screenWidth = visibleSize.width;    screenHeight = visibleSize.height;    scale = 1.0f;    label1 = Label::create("0,0,0","Arial",70);    label1->setPosition(screenWidth / 2, screenHeight / 2);    this->addChild(label1);    Device::setAccelerometerEnabled(true);    auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(HelloWorld::onAcceleration, this)); //CC_CALLBACK的作用是让_target_对象用_selector_函数时绑定第0/1/2/3个参数后面参数的值    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);     i = 5;    schedule(schedule_selector(HelloWorld::update),0.2f); //0.2用来设置每两次调用回调函数的时间间隔,第一个参数是回调函数。    CCLOG("update startted!");    return true;}void HelloWorld::update(float dt){    if (i > 0)    {        CCLOG("i = %d ",i);        i--;    }    else    {        unschedule(schedule_selector(HelloWorld::update)); //取消定时器        CCLOG("update ended!");        schedule(schedule_selector(HelloWorld::update_1), 0.2f); //注册新的定时器        CCLOG("update_1 startted!");    }}void HelloWorld::update_1(float dt){    if (i < 5)    {        i++;        CCLOG("i = %d ", i);    }    else    {        unschedule(schedule_selector(HelloWorld::update_1)); //取消定时器        CCLOG("update_1 ended!");    }}

计时器的注册与取消方法:
1、最简单的定义:使用scheduleUpdate()注册,然后重写update方法:virtual void update(float dt);即可,其中参数dt即时间间隔。取消时对应使用unscheduleUpdate()。
2、带参数的定义:schedule(schedule_selector(HelloWorld::update),0.2f),这样可以直接更改时间间隔dt值。使用unschedule(schedule_selector(HelloWorld::update));取消。
需要注意的是注册和取消是对应的,可以使用unscheduleAllSelectors取消正在作用的所有定时器。

其运行效果如下,我注册了两个定时器,update计时5次后取消并注册update_1,然后update_1计时5次后取消。
这里写图片描述

在书中看到,在实际应用中,可以同时注册多个定时器来进行多线程操作,能够想象但是难度有点大,就不去试了。

0 0