Cocos2d-x 3.0 新特性- 回调函数的变化

S32K实现FlexNVM模拟EEPROM,并实现在一个固定地址更新数据 接上一篇FlexRAM模拟EEPROM,这篇我们用FlexNVM模拟EEPROM. Question1: 在操作Flash的时候,会将代码运行到RAM区内,目前没有找到实际代码,没搞清楚。 Question2:在操作Flash的时候,Demo例程中总会出现,后门密钥访问加密安全字节,也没搞清楚。 但是,通过看了一个礼拜的手册和Demo例程,将代码中可以实现功能的部分摘抄下来,以供交流 /... 阅读详情

转自:http://blog.youkuaiyun.com/crayondeng/article/details/18767407

在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于有过iOS开发经验的来说,应该很亲切,就是 block。

下面将通过几个例子详细介绍在3.0版本中回调函数的各种用法。温馨提示:由于用到了C++11中的std::function,std::bind和lambda表达式,所以对此不太了解的可以先看看我之前的这篇有关C++11的一些用法介绍  点击打开链接 。

一、通过 HelloWorldScene 中的 closeItem 开始

在cocos2d-x 2.x 版本中:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CCMenuItemImage *pCloseItem = CCMenuItemImage::create(  
  2.                                         "CloseNormal.png",  
  3.                                         "CloseSelected.png",  
  4.                                         this,  
  5.                                         menu_selector(HelloWorld::menuCloseCallback));  

在cocos2d-x 3.0 版本中:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto closeItem = MenuItemImage::create(  
  2.                                            "CloseNormal.png",  
  3.                                            "CloseSelected.png",  
  4.                                            CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));  

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void HelloWorld::menuCloseCallback(Object* pSender)  
  2. {  
  3.     Director::getInstance()->end();  
  4.   
  5. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  6.     exit(0);  
  7. #endif  
  8. }  

注意到在3.0版本中使用到 CC_CALLBACK_1 这样一个宏定义。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. // new callbacks based on C++11  
  2. #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)  
  3. #define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)  
  4. #define CC_CALCC_CALLBACK_1(HelloWorld::menuCloseCallback,this)LBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)  
  5. #define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3 ##__VA_ARGS__)  

原来还有 CC_CALLBACK_0 1 2 3;而其中又有什么区别呢?

1、首先我们看看3.0版本中MenuItemImage的create方法:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MenuItemImage * MenuItemImage::create(const std::string& normalImage, const std::string& selectedImage, const ccMenuCallback& callback)  
其中的回调参数是 ccMenuCallback 

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef std::function<void(Object*)> ccMenuCallback  
原来这里使用到了 C++ 中的 function 语法。

注意到 在 CC_CALLBACK_  的宏定义的中使用到的是 C++ 的 bind 语法,怎么不一致了呢? -- 见下面第四点 function


2、看回 CC_CALLBACK_  的宏定义

原来 CC_CALLBACK_  的宏定义中后面的 0 1 2 3分别表示的是 不事先指定回调函数参数的个数。

例如说 CC_CALLBACK_ 1 表示的是,回调函数中不事先指定参数是一个,而事先指定的回调函数的参数 可以任意多个。

而且要注意到其中 不指定回调函数参数  和  指定回调函数参数  的顺序,注意不事先指定的在前,事先指定的在后。

下面通过例子说明这一点:

假设回调函数:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. // a selector callback  
  2.     void menuCloseCallback(Object* pSender,int a,int b);  


[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void HelloWorld::menuCloseCallback(Object* pSender,int a,int b)  
  2. {  
  3.     std::cout<<a<<"  "<<b<<std::endl;  
  4.     Director::getInstance()->end();  
  5.   
  6. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  7.     exit(0);  
  8. #endif  
  9. }  
注意到在回调函数中输出 a b

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto closeItem = MenuItemImage::create(  
  2.                                            "CloseNormal.png",  
  3.                                            "CloseSelected.png",  
  4.                                            CC_CALLBACK_1(HelloWorld::menuCloseCallback,this,1,2));  
注意中其中 指定了两个参数 1 2 

运行,在 点击closeItem  的时候,就会输出这两个事先指定的参数 1  2。

那么,不事先指定的参数是在什么时候传入的呢?

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void MenuItem::activate()  
  2. {  
  3.     if (_enabled)  
  4.     {  
  5.         if( _callback )  
  6.         {  
  7.             _callback(this);  
  8.         }  
  9.           
  10.         if (kScriptTypeNone != _scriptType)  
  11.         {  
  12.             BasicScriptData data(this);  
  13.             ScriptEvent scriptEvent(kMenuClickedEvent,&data);  
  14.             ScriptEngineManager::getInstance()->getScriptEngine()->sendEvent(&scriptEvent);  
  15.         }  
  16.     }  
  17. }  
注意到其中的  _callback(this);  对了,这个时候就传入了 这个不事先指定的回调函数参数。

这样,closeItem 的回调函数的 void HelloWorld::menuCloseCallback(Object* pSender,int a,int b) 的三个参数都知道了。

第一个 不事先指定,在menu item调用 activate 的时候,_callback(this) 传入,this 也即是这个 menu item;第二、三个参数是事先指定的 1,2。


3、bind

已经知道  CC_CALLBACK_  的宏定义是 std::bind 那么我们可以直接使用std::bind。

如下:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto closeItem = MenuItemImage::create(  
  2.                                            "CloseNormal.png",  
  3.                                            "CloseSelected.png",  
  4.                                            std::bind(&HelloWorld::menuCloseCallback, this,std::placeholders::_1,1,2));  

4、function

最后就解决上面的一个疑惑。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. std::function<void(Object*)> func = std::bind(&HelloWorld::menuCloseCallback,this, std::placeholders::_1,1,2);  
  2.     auto closeItem = MenuItemImage::create(  
  3.                                            "CloseNormal.png",  
  4.                                            "CloseSelected.png",  
  5.                                            func);  

5、使用lambda表达式

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto closeItem = MenuItemImage::create(  
  2.                                            "CloseNormal.png",  
  3.                                            "CloseSelected.png",  
  4.                                            [&](Object *sender){  
  5.                                                Director::getInstance()->end();  
  6.                                                #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  7.                                                exit(0);  
  8.                                                #endif  
  9.                                            });  
可见使用lambda表达式可以极大的简化代码程序,不需要再定义一个回调函数,直接将在回调中的操作在闭包中体现即可。


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

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

下面是官方文档中的说明:

  • CallFunc can be created with an std::function<void()>
  • CallFuncN can be created with an std::function<void(Node*)>
  • CallFuncND and CallFuncO were removed since it can be created with simulated with CallFuncN and CallFunc. See ActionsTest.cpp for more examples
其中:CallFuncND 和 CallFuncO 都可以通过 CallFunc 和 CallFuncN 进行实现。

下面通过例子详细的介绍这两个回调动作的用法。

1、CallFunc

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. static CallFunc * create(const std::function<void()>& func);  

关于CallFunc的例子,在文档中已经有体现:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. // in v2.1  
  2. CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );  
  3.   
  4. // in v3.0 (short version)  
  5. auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this));  
  6. auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));  
  7.   
  8. // in v3.0 (long version)  
  9. auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this));  
  10. auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));  
  11.   
  12. // in v3.0 you can also use lambdas or any other "Function" object  
  13. auto action1 = CallFunc::create(  
  14.                  [&](){  
  15.                      auto s = Director::sharedDirector()->getWinSize();  
  16.                      auto label = LabelTTF::create("called:lambda callback", "Marker Felt", 16);  
  17.                      label->setPosition(ccp( s.width/4*1,s.height/2-40));  
  18.                      this->addChild(label);  
  19.                  }  );  


2、CallFuncN

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. static CallFuncN * create(const std::function<void(Node*)>& func);  

注意到该回调动作带有一个Node*参数。特别注意的是回调函数的参数必须是Node*, 不能是其子类,例如Sprite*等,否则会报编译错误。

假设回调函数:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void ActionCallFuncN::callback(Node* sender )  


[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto action = Sequence::create(  
  2.        MoveBy::create(2.0f, Point(150,0)),  
  3.        CallFuncN::create( CC_CALLBACK_1(ActionCallFuncN::callback, this)),  
  4.        NULL);  

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto action = Sequence::create(  
  2.                                    MoveBy::create(2.0f, Point(150,0)),  
  3.                                    CallFuncN::create(std::bind(&ActionCallFuncN::callback,this,std::placeholders::_1)),  
  4.                                    NULL);  

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto action = Sequence::create(  
  2.                                    MoveBy::create(2.0f, Point(150,0)),  
  3.                                    CallFuncN::create([&](Node* sender){  
  4.                                     //回调动作代码  
  5.           
  6.                                     }),  
  7.                                    NULL);  

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

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

实现过程类似于 CallFuncN  

假设回调函数是 :void ActionCallFuncND::doRemoveFromParentAndCleanup(Node* sender, bool cleanup)

那么在回调动作中:

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

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


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

实现过程类似于 CallFunc 

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

那么在回调动作中:

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

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


三、总结

在新版的回调处理中,采用了C++11中的 std::function 、std::bind 、lambda 表达式,使得回调的处理变得形式多样,代码灵活了,而其中的lambda表达式可以极大的简化回调代码,推荐使用。


用Cocos2d-x v3.0做一个贪吃蛇游戏 在CocoaChina上看到了这个活动, 阅读详情

相关推荐

Cocos2d-x 3.0 新特性体验- 回调函数的变化

在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于有过iOS开发经验的来说,应该很亲切,就是 block。 下面将通过几个例子详细介

FE攻城狮 3184

CC_CALLBACK原理及应用

c++ 11 基础 :     std::function         类模版 std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标进行存储、复制、和调用操作,这些目标包括函数、lambda表达式、绑定表达式、以及其它函数对象等。 用法示例: ①保存自由函数 ? 1 2 3 4 5 6 7

yaonai2003的专栏 928

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码)

本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。

weixin_42527160的博客 222

贯通理解CC_CALLBACK_N(结合function、bind)

cocos的CC_CALLBACK_N集中了bind、std::function等诸多C++11 新功能,如何溯源源码加以分析?本文给出了一个最终的解析。本文也有助于深入理解回调函数之妙用。

weixin_55360766的博客 471

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1498

H2O到OmniH2O细节解读,人形机器人遥操作的技术演进与哲学

摘要:CMU何泰然团队相继发表的H2O和OmniH2O论文为人形机器人遥操作领域带来突破。H2O首创Sim-to-Data方法,通过形态/动作重定向和特权筛选处理人类动作数据,PPO算法实现基础控制。OmniH2O改进为教师-学生蒸馏框架,采用DAgger算法增强泛化能力,并消除对线速度输入的依赖。这两项工作从概念验证到工程落地,建立了一套完整的动作学习范式,为具身智能研究提供了重要参考。

CyanNoah的博客 1387

Cocos2d-x 3.0 新特性体验(2) 回调函数的变化

在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于有过iOS开发经验的来说,应该很亲切,就是 block。 下面将通过几个例子详细介

小邓笔记 1万+

汽车零部件智能装配:C#+YOLOv8实现螺栓漏装检测与齿轮错位识别(附PLC通信与机械臂控制)

YOLOv8:小目标检测的最优解相比YOLOv7,YOLOv8的C2f特征融合网络对小目标(5-10mm螺栓)检测精度提升12%,且推理速度快8%;支持大输入尺寸(不显著增加耗时),可放大螺栓细节;官方提供yolov8n.pt(nano版),在边缘计算盒上能跑40+FPS,满足实时性。C#:工业软件的“兼容性核心”主流PLC(西门子S7-1200/1500)、机械臂(ABB、KUKA)的SDK多基于.NET开发,C#可直接调用,避免跨语言通信延迟;多线程管理成熟(Task。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1146

Cocos2d-x 3.0 新特性体验(2) 回调函数的变化

在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于有过iOS开发经验的来说,应该很亲切,就是 block。 下面将通过几个例子详细介...

BenNiao110的专栏 253

SpringSecurity(15)——OAuth2密码模式

SpringSecurity Oauth2密码模式

peng_gx的博客 1520

VS2019 +osg3.6.5+ earth3.2+qt5.14.2+osgQt 编译教程

用vs新建工程,稍后会在写一篇博客上分享四、结语至此,所有的编译就均已完成。

king_ink的博客 1132

Cocos2d-x:3.0和2.0之间的区别

区别1.去CC 区别2.cc***结构体改变 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Alostz 1605

ceph recovery 相关参数

可以修改的最大回填/恢复选项列在 “恢复/回填选项” 部分。mClock 的修改 默认回填/恢复限制由 osd_mclock_override_recovery_settings 选项,设置为 默认为 false。尝试修改任何默认恢复/回填限制而不设置门控选项,会将该选项重置为 mClock 默认值,并在集群日志中记录一条警告消息。请注意,默认值可能需要几秒钟才能恢复生效。请使用 config show 命令验证限制,如下所示。就直接设置以下参数,过一会就变回了默认值。简单点说官网的意思就是不设置。

weixin_40548182的博客 277

Cocos2d-x 3.0 新特性体验(1)创建项目+运行sample+新特性内容

不得不说,cocos2d-x的版本更迭真是快,而最新的cocos2d-x v3.0 Beta版本中包含了许多新的特性和与之前2.x版本不同的内容,虽然说,目前3.0只是beta版本,但目前很多游戏已经采用这个3.0版本了,估计3.0的最终版本也会很快推出。 从创建项目开始了解一下这个最新的3.0版本的一些新特性吧! 一、创建项目(针对在mac os x中进行开发) 在前面我有一篇

小邓笔记 1万+

基于Simulink使用激光雷达数据跟踪车辆仿真(附源码)

这些模型将长方体的尺寸定义为状态转换期间的常量,并且它们的估计值在滤波器的校正阶段随时间演变。下面的动画显示了在滤波器的预测阶段将具有不同概率的恒定速度和恒定转弯率模型混合在一起的效果。此示例显示了如何使用带有 IMM 过滤器的 JPDA 跟踪器来跟踪使用激光雷达传感器的对象。图像和激光雷达数据读取器从 MAT 文件中读取记录的数据,并分别输出参考图像和点云中点的位置。跟踪器块选中“启用所有轨道输出”和“启用可检测的跟踪 ID 输入”复选框,以从跟踪器输出所有轨道,并将其检测概率作为其状态的函数进行计算。

珞瑜的博客 2565

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

cocos2d-x 2.0升级为3.0一些常见变化纪录

http://www.blogjava.net/dongbule/archive/2013/12/27/408140.html 1.去CC 之前2.0的CC**,把CC都去掉,基本的元素都是保留的 2.0 CCSprite  CCCallFunc CCNode .. 3.0 Sprite CallFunc Node .. 2.cc***结构体改变 2.0

poem_of_sunshine的专栏 1260

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Cocos2d-x 3.0 开发(十一)3.0 alpha1文件结构变化

coco2d-x alpha1发布了,其文件结构发生了些变化,我们一起来看一下...

阿修罗道 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Cocos2d-x中2.x和3.x的粒子系统的比较

CCParticleBatchNode和ParticleBatchNode 相似的地方: 继承图: 两个类都继承自Node(v2.x中的CCNode,PS:官网又弄反了)和TextureProtocol(v2.x中的CCTextureProtocol)。 (注意:后面将全部用V3.0的概念,即不会再加入类名的CC前缀) ParticleBatchNode类似于一个批处理节点,它将

huang_hws的专栏 7503

cocos2d-x 3.0 开发(一) Hello_New_World

2dx 的3.0版本是个与以往不同的版本。变化比2dx从1.x 到2.x的变化还要大不少。当然这都是官方承诺的,只有我们在项目中实际用上了才有意义。这篇是3.0系列博客的一个HelloWorld。希望新的版本会带给我们更多惊喜。接下来我会研究一下新版的特性,并写成博客。希望大家关注,路过看看,指点一二。另一方面,也共同推进2dx的进步。 废话少说,接下来进入正题。搭建一个3.0的环境。

阿修罗道 4万+

cocos2d-x v3.0新特性及使用

cocos2d-x v3.0新特性及使用

Unity3d 攻城师一枚 1万+

cocos2d-x学习笔记——cocos2d-x3.0回调函数的变化

原文转自Cocos2d-x 3.0 新特性体验(2) 回调函数的变化 在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于

c++菜鸟一只。 791

Cocos2d-x 3.0 回调函数的变化 .

cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于有过iOS开发经验的来说,应该很亲切,就是 block。 下面将通过几个例子详细介绍

u013321328的专栏 785

总结Cocos2d-x 3.x版本的一些变化

【唠叨】     本节摘自:     (1)v3.0 发布说明:https://github.com/fusijie/Cocos2d-x3.0-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md     (2)C++11 新特性:http://blog.csdn.net/ls1122/article/details

Astor的专栏 2762

cocos2dx2.0升级为3.0一些常见变化纪录

原文链接:http://www.blogjava.net/dongbule/archive/2013/12/27/408140.html 最近接手项目从cocos2dx 2.0 升级为 3.0 ,至于为什么要升级我也弄不清楚,只感觉3.0是要摆脱cocos2d-iphone的身影,这是要作死的态度吗,没时间去了解3.0的核心发生了神马变化,只为了从cocos2dx2.0经常适应到

zzstack的专栏 446
上一篇: C++11 语法记录
下一篇: Android 蓝牙通信
骑行的蜗牛
博客等级 码龄21年 107粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值