Cocos2d-x schedulers 定时器

调度器(schedulers)负责以一定时间间隔触发一个给定的回调方法(callback)。

两种不同类型的回调:

    1、update selector:update sellctor 会在每帧被调用,你可以自定义它的优先级。

    2、自定义selector:自定义selector可以在每帧被调用,或以自定义的时间间隔调用。

尽可能避免使用自定义selector。使用update selector比较快,且内存消耗较小。

通过:CCDirector::sharedDirector()->getScheduler();获取全局定时器。

API:

//更新定时器,每帧调用1次。每个节点只能有1个被调度的update函数  
void scheduleUpdate(void);  
//卸载更新定时器  
void unscheduleUpdate(void);  
  
//自定义定时器,如果重复调用,那调用间隔会更新,而不会再次调用  
//interval,调用时间间隔,如果为0,建议使用scheduleUpdate  
//repeat,回调函数会被执行repeat+1次,kCCRepeatForever是无限次调用  
//delay,第一次执行前的延时  
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);  
void schedule(SEL_SCHEDULE selector, float interval);  
void scheduleOnce(SEL_SCHEDULE selector, float delay);  
void schedule(SEL_SCHEDULE selector);  
//卸载自定义定时器  
void unschedule(SEL_SCHEDULE selector);  
void unscheduleAllSelectors(void);  
  
//恢复所有定时器和动作,OnEnter调用  
void resumeSchedulerAndActions(void);  
//暂停所有定时器和动作,OnExit调用  
void pauseSchedulerAndActions(void);  
  
//scheduleUpdate每帧调用  
virtual void update(float delta);

Demo:

自定义定时器

bool HelloWorld::init(){
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    CCSprite *sprite = CCSprite::create("HelloWorld.png");
    sprite->setPosition(ccp(winSize.width/2, winSize.height/2));
    this->addChild(sprite);
    
    // 创建定时器
    CCDirector::sharedDirector()->getScheduler()->scheduleSelector(SEL_SCHEDULE(&HelloWorld::menuCloseCallback), this, 5.0, false);
    
    return true;
}

// 被定时器调用的函数
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
	CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
    CCDirector::sharedDirector()->end();
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
#endif
}

更新定时器 scheduleUpdate

// HelloWorldScene.h
void update(float delate);

// HelloWorldScene.cpp
bool HelloWorld::init(){
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    CCSprite *sprite = CCSprite::create("HelloWorld.png");
    sprite->setPosition(ccp(winSize.width/2, winSize.height/2));
    this->addChild(sprite);
    
    // 开启定时器
    this->scheduleUpdate();
    
    return true;
}

void HelloWorld::update(float delate){
    CCLog("%f", delate);
}


你可能感兴趣的:(Cocos2d-x schedulers 定时器)