博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-x schedulers 定时器
阅读量:6228 次
发布时间:2019-06-21

本文共 2346 字,大约阅读时间需要 7 分钟。

hot3.png

调度器(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.hvoid update(float delate);// HelloWorldScene.cppbool 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

你可能感兴趣的文章
如何打造支撑百万用户的分布式代码托管平台
查看>>
《机器人操作系统ROS原理与应用》——第1章 智能机器人及其发展概述
查看>>
《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.5节对象的排列
查看>>
Android 数据库框架ormlite
查看>>
零基础学习贴:如何收取短信回复消息
查看>>
网鱼网咖-利用数加快速搭建大数据平台,极致洞察,为客户带来从所未有的体验。...
查看>>
保护App重要数据,防止Cycript/Runtime修改
查看>>
iperf 测试网络性能指标
查看>>
windows下安装mysql压缩包版[转]
查看>>
Emacs常用命令汇总
查看>>
从传统IT快速走向公共云计算
查看>>
小菜一步一步学数据结构之(一)基本概念和术语
查看>>
《Redis官方教程》Redis集群规范
查看>>
Mac下没有make命令解决办法
查看>>
DLL中传递STL参数
查看>>
postgresql 范围类型
查看>>
隐藏 tengine 和 tomcat 版本号
查看>>
非面试向跨域实践详解
查看>>
一个非常好看的图片选择框架LPhotoPicker,确定不来看看么
查看>>
线上压缩代码-定位错误
查看>>