来源:

http://blog.csdn.net/crayondeng/article/details/18767407

二、在cocos2d-x中,还有一个地方是需要大量使用到回调函数的,这就是回调动作:CCCallFunc、CCCallFuncN、CCCallFuncND、CCCallFuncO。

但是这四个回调动作在 3.0 版本中已经都提示 deprecate 了。那么在3.0 版本中已经只剩下 CallFunc 和 CallFuncN.

其中:CallFuncND 和 CallFuncO 都可以通过 CallFunc 和 CallFuncN 进行实现。

1、CallFunc

  1. static CallFunc * create(const std::function<void()>& func);

CallFunc的官方例子:(我也是照copy的喔

// in v2.1

CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );

// in v3.0 (short version)    

auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this));

auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));

// in v3.0 (long version) 

auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this));

auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));

// in v3.0 you can also use lambdas or any other "Function" object

auto action1 = CallFunc::create(  [&](){

auto s = Director::sharedDirector()->getWinSize();

auto label = LabelTTF::create("called:lambda callback",     "Marker Felt", 16);

label->setPosition(ccp( s.width/4*1,s.height/2-40));

this->addChild(label);

}  );

 

2、CallFuncN

[cpp] view plain copy

static CallFuncN * create(const std::function<void(Node*)>& func);

注意到该回调动作带有一个Node*参数

假设回调函数:

   void ActionCallFuncN::callback(Node* sender )  

例子:

   2.0调用:

auto action = Sequence::create( MoveBy::create(2.0f, Point(150,0)), CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),NULL);

3.0中的lambda调用

auto action = Sequence::create(MoveBy::create(2.0f, Point(150,0)),

CallFuncN::create([&](Node* sender){

//回调动作代码

// sender :谁调用CallFunN 就代表谁

}),NULL);

================================================================

================================================================

受益于C++11的新语法特性 std::bind ; CallFuncND 和 CallFuncO 都可以通过 CallFunc 和 CallFuncN 进行实现

1、CallFuncND :回调动作中带有一个Node*参数一个void*参数

实现过程类似于 CallFuncN

假设回调函数是 :

void ActionCallFuncND::doRemoveFromParentAndCleanup(Node* sender, bool cleanup)

那么在回调动作中:

CallFuncN::create( CC_CALLBACK_1(ActionCallFuncND::doRemoveFromParentAndCleanup, this, true))

这样就实现了等价于 CallFuncND 的回调动作。

2、CallFuncO :回调动作中带有一个Object*参数

实现过程类似于 CallFunc

假设回调函数是: void ActionCallFuncO::callback(Node* node, bool cleanup)

那么在回调动作中:

CallFunc::create( CC_CALLBACK_0(ActionCallFuncO::callback, this, _grossini, true)

这样就实现了等价于 CallFuncO  的回调动作。

cocos2dx3.0的CCCallFunc、CCCallFuncN的更多相关文章

  1. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  2. Cocos2d-X3.0 刨根问底(八)----- 场景(Scene)、层(Layer)相关源码分析

    本章节我们重点分析Cocos2d-x3.0与 场景.层相关的源码.这部分源码集中在 libcocos2d –> layers_scenes_transitions_nodes目录下面 我先发个截 ...

  3. Cocos2d-X3.0 刨根问底(七)----- 事件机制Event源码分析

    这一章,我们来分析Cocos2d-x 事件机制相关的源码, 根据Cocos2d-x的工程目录,我们可以找到所有关于事件的源码都存在放在下图所示的目录中. 从这个event_dispatcher目录中的 ...

  4. Cocos2d-X3.0 刨根问底(一)----- 概览

    罗嗦几句,本系列文章记录了小鱼(本人)自学Cocos2D-X的整个过程,主要从分析Cocos2D-x的源码方式来学习Cocos2d-x这样一个优秀的游戏引擎架构,本着不但要知其然还要知其所以然的学习态 ...

  5. Mac下cocos2dx-3.0打包Android时,提示&quot;SimpleAudioEngine.h&quot;not found的解决方法

    前段时间触控公布cocos2dx-3.0,在升级之后试过之后,在最初的不习惯之后,感觉比之前的好用了不少,在下之前一直是用xCode模板创建,这回算是一口气升到顶了. 之后再一次编程时须要用到Sima ...

  6. cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例

    转自:http://xiandanboke.com.cn/cocos2d-xcccallfunc.html CCCallFunc CCCallFuncN CCCallFuncND的区别和使用 CCCa ...

  7. cocos2d-x3.0+Eclipse配置说明

    假如我们已经装了JavaJDK.Cygwin,也解压了2013-08-27之后最新的AndroidSDK,其实最新的AndroidSDK已经集成了eclipse,eclipse里面已经配置好了Andr ...

  8. Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界

    这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...

  9. mac下配置cocos2d-x3.0

    今天看到3.0的正式版公布了,就马上荡下来试试3.0,以下记录下环境变量配置过程 打开用户文件夹下.bash_profile文件,配置环境 1.首先配置下android sdk,我的是在opt文件夹下 ...

随机推荐

  1. mysql主从之slave-skip-errors和sql_slave_skip_counter

    一般来说,为了保险起见,在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=1以跳过命令.但 ...

  2. 错误:当你使用id作为sharepoint的自定义页面的查询参数时,总会提示项目不存在!

    No item exists at http://SERVER/SITE/mypage.aspx?ID=1. It may have been deleted or renamed by anothe ...

  3. react-native Simulator com+r不能刷新模拟器

    这个问题是我按了com + shift + K 调出Simulatior 的时候出现的, 然后虚拟机就刷新不了了, 怎么按com+r都不好使. 在Simulatior的菜单栏选择Hardware -- ...

  4. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  5. Bundle包的制作与使用

    一.清爽Bundle模式(在应用工程中创建Bundle的子文件夹,而非在Bundle项目中): 1.新建Bundle包 2.生成Bundle包,并拖入项目中,然后"右键显示包内容" ...

  6. js继承方式

    1.原型链 实现的本质是重写原型对象,代之以一个新类型的实例: 给原型添加方法的代码硬顶放在替换原型的语句之后: 不能使用对象字面量查收能见原型方法,这样会重写原型链. 缺点:包含引用类型值的原型属性 ...

  7. json的理解及读取

    一: JSON 语法是 JavaScript 对象表示语法的子集,其语法规则如下: 数据在键值对中 数据由逗号分隔 花括号保存对象:{} 方括号保存数组:[] 如:[{"name" ...

  8. 在Ubuntu上搭建Hadoop群集

    前面我搭建的Hadoop都是单机伪分布式的,并不能真正感受到Hadoop的最大特点,分布式存储和分布式计算.所以我打算在虚拟机中同时开启3台机器,实现分布式的Hadoop群集. 1.准备3台Ubunt ...

  9. EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉

    2014年7月EZchip花1.3亿美元收购的Tilera2015年10 Mellanox 8亿美元收购EZchip,2016年1月完成.EZchip转手卖掉Tilera与自己? http://www ...

  10. JAVA开发中遇到的小白点

    这里主要是自己个人开发中遇到的一些小问题,自己攒起来,来弥补自己薄弱的JAVA基础,大神不要见笑 1. DateFormat格式化的HH和hh区别: public static boolean com ...