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);
}


转载于:https://my.oschina.net/laoxieit/blog/228683

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值