Cocos2d-x-3.x特性变化目录
第1章字面替换
1.1 去除CC前缀
1.2 枚举常量的封装
1.3 单例对象的获取
1.4 纹理缓存对象被放置到Director中
1.5 Node类的属性函数名修改
第2章 c++11新特性
2.1 auto关键字
2.1.1 auto特性
2.1.2 建议
2.2 lambda表达式
2.2.1 最简单的lambda表达式
2.2.2 定义lambda表达式函数变量
2.2.3 lambda表达式概念
2.2.4 捕捉列表
2.2.5 参数列表
2.2.6 返回值
2.2.7 代码块
2.3 lambda表达式在cocos2dx中的应用
2.4 std::function和std::bind第1章  字面替换
1.1  去除CC前缀
由于cocos2d-x开发者认为已经有命名空间来避免命名冲突,因此在3.0及其以后的版本里,标识符命名放弃了CC前缀。
比如CCSprite被改成了Sprite,CCDirector被改成了Director
1.2  枚举常量的封装
很多枚举变量都进行了修改,要使用类名::枚举名来访问,避免冲突,比如:
glview->setDesignResolutionSize(768,1280, ResolutionPolicy::EXACT_FIT  /*kResolutionExactFit*/);
kResolutionExactFit已经被标记为废弃,建议使用新的宏ResolutionPolicy::EXACT_FIT,但是kResolutionExactFit依旧能使用,编译时候会得到一个警告。
1.3  单例对象的获取
在2.x中,使用sharedXXX静态函数来获取单例对象,比如:
CCUserDefault::sharedUserDefault()->seIntergerForKey(...);
在3.x中使用
CCUserDefault::getInstance()来获取单例对象
1.4  纹理缓存对象被放置到Director中
通过CCDirector::getTextureCache()去获取纹理缓存
1.5  Node类的属性函数名修改
virtualvoid setRotationSkewX(float rotationX);
CC_DEPRECATED_ATTRIBUTEvirtualvoid setRotationX(floatrotationX) { return setRotationSkewX(rotationX); }virtualRect getBoundingBox() const;/** @deprecated Use getBoundingBox instead */CC_DEPRECATED_ATTRIBUTEinlinevirtualRect boundingBox() const { return getBoundingBox(); }virtualvoid setLocalZOrder(int localZOrder);CC_DEPRECATED_ATTRIBUTEvirtualvoid setZOrder(intlocalZOrder) { setLocalZOrder(localZOrder); }
可怜常用的SetZOrder,boundingbox,全部得改了,老版本也能用,但是会被警告第2章  c++11新特性
2.1  auto关键字
2.1.1  auto特性
auto i = 1;
编译器知道i是个整数类型
auto director =Director::getInstance();
根据getInstance的返回,编译器知道是Director类型的指针
2.1.2  建议
建议:别滥用auto,实在不行的时候用,平时该咋地还咋地,auto写起来比int还长一些呢,都是auto以后代码看起来很痛苦的
2.2  lambda表达式
2.2.1  最简单的lambda表达式
int i = []{return1;}();
以上结果会返回1,然后赋值给i
2.2.2  定义lambda表达式函数变量
auto func = []{return 1;};
auto value = func();如果把func替换成lambda表达式,就变成2.2.1中的样子了。
2.2.3  lambda表达式概念
lambda表达式是一个匿名函数,格式如下:
[捕捉列表](参数列表)->返回类型{代码块;}
其中返回类型和参数列表可以省略,所以有了以上最简单的lambda表达式了。
2.2.4  捕捉列表
1.传值捕获
捕捉列表使得lambda表达式能访问外部变量。
int func()
{intb = 1;intc = [=b]{ b++; return b; };
}
以上lambda表达式里,捕获列表将b捕获到表达式中,使得表达式可以使用变量名b。但是使用=b捕获,是传值捕获,lambda中的b++不会影响fanc中的b。
在gcc中,b++的操作会报错,应为b在lambda中,属于常量,但是vc比较坑爹,没有报错。
2.传址捕获
int func()
{intb = 1;intc = [&b]{ b++; return b; };
}
使用&表示传址捕获,lambda表达式中的b++会使得func中的b增加1
3.捕获多项变量
int func()
{intb = 1;intd=1;intc = [&b,=d]{ return ++b+d; };
}
需要捕获多项时候,用逗号隔开
4.全捕获
intfunc()
{int b = 1;int d = 1;int c = [&]{b++; d++; return b+d;}
}
全部变量都被引用方式捕获
intfunc()
{int b = 1;int d = 1;int c = [=]{b++; d++; return b+d;}
}
以上例子,全部变量被拷贝方式捕获,b++和d++不影响外面的变量
捕获列表也能捕获全局变量。
2.2.5  参数列表
参数列表和普通函数的参数列表一样,我就不唠叨了
2.2.6  返回值
返回值,我一般都省略了,没啥用啊,编译器会自动推导的。但是在某种情况下有点用,比如:
autoi = []->int{return 0.5f}();
如果没有->int标记返回值,那么i的类型将会是float。
2.2.7  代码块
跟普通函数的代码块没啥区别。
2.3  lambda表达式在cocos2dx中的应用
很多回调函数都可以使用lambda来表示了,这样可以省去很多麻烦,用之前的selector也还可以,但是会获得一个警告。MenuItem*item = MenuItemFont::create("Close Program", []{Director::getInstance()->end();
});
以上代码示例了,如果创建一个菜单项,当点击这个菜单时,调用了一个lambda表达式,去停止程序。
2.4  std::function和std::bind
#include<cstdio>
#include<cstdlib>
#include<functional>int f(inti, charc, doubled)
{printf("int is %d, char is%c, dobule is %g\n", i, c, d);returni;
}classF
{
public:virtualvoid func()  {printf("F::func\n");}
};
classC : publicF
{
public:void func() overridefinal  {printf("C::func\n");}
};int main()
{// 作为函数的包装std::function<int(int, char, double)> ff;ff = f;ff(1, 'c', 4);ff = std::bind(f,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);ff(2, 'c', 5);std::function<int(int)> ff1;ff1 = std::bind(f,std::placeholders::_1, 'c', 8);ff1(2);std::function<int(double, char, int)> ffr;ffr = std::bind(f,std::placeholders::_3, std::placeholders::_2, std::placeholders::_1);ffr(10.0, 'c', 1);C c;std::function<void()> mFunc;mFunc = std::bind(&F::func, &c);mFunc();// lambda 和function,给匿名函数命名,尼玛的,真能折腾。。。直接给个名字好不好std::function<int(int, int)> lFunc = [](inta, intb){returna + b; };int a = lFunc(3, 4);printf("result is %d\n", a);// lambda和bind和functionlFunc = std::bind([](inta, intb){returna + b; },std::placeholders::_1, std::placeholders::_2);a = lFunc(100, 1000);printf("result is %d\n", a);system("pause");
}

转载于:https://blog.51cto.com/libinqi456/1602894

Cocos2d-x-3.x特性变化相关推荐

  1. Qt 5.4发布,详解Android特性变化

    2014年12月10日, Qt 5.4 终于发布了!官方博客的博文:http://blog.qt.digia.com/blog/2014/12/10/qt-5-4-released/ . 下载链接:h ...

  2. Vue3的新特性变化,上手指南!

    文章目录 一.Vue3相比Vue2,更新了什么变化? 二.Proxy 代理响应式原理 三.组合式 API (Composition API) setup()函数: ref()函数 reactive() ...

  3. 01数字基带信号及其频谱特性

    S1 数字基带信号及其频谱特性 一.分类 1.单极性不归零波形 优点:电脉冲之间无间隔,极性单一,易于用TTL,CMOS电路产生: 缺点: a) 有直流成份:判决电平不能稳定在最佳的电平,抗噪声性能不 ...

  4. rls lms 对比 matlab,自适应均衡器的LMS和RLS两种算法的特性与仿真分析

    自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法.最小均方(LMS)算法.递归最小二乘(RLS)算法.变换域均衡算法.Bussgang算法.高阶或循环统计量算法.基于 ...

  5. MOS管工作原理及特性

    转载于:http://www.elecfans.com/d/826748.html 什么是MOS管? MOS管的英文全称叫MOSFET(Metal Oxide Semiconductor Field ...

  6. 浅析MOS管工作原理及特性

    什么是MOS管? MOS管的英文全称叫MOSFET(Metal Oxide Semiconductor Field Effect Transistor),即金属氧化物半导体型场效应管,属于场效应管中的 ...

  7. 四参数拟合曲线_软磁磁粉芯直流偏置特性的拟合曲线解读

    磁粉芯(粉末磁芯)的直流偏置曲线-拟合曲线的解读 上次我们了解了美磁"MAGNETICS"其中一类磁粉芯-铁硅铝的直流偏置特性曲线,并对其进行了说明,这次我们说明另一类直流偏置的特 ...

  8. Go 1.17新特性详解:支持将切片转换为数组指针

    Go属于那种极简的语言[1],从诞生到现在语言自身特性变化很小,不会像其他主流语言那样走"你有的我也要有"的特性融合路线.因此新语言特性对于Gopher来说属于"稀缺品& ...

  9. Android Q版本应用兼容性适配指导

    目录 Android Q版本应用兼容性适配指导... 1 1.      背景说明... 4 2.      存储空间限制... 4 2.1背景     4 2.2兼容性影响... 5 2.3 适配指 ...

最新文章

  1. 英国皇家学会院士樊文飞:把大数据变小,突破企业资源限制
  2. leetcode 662. Maximum Width of Binary Tree | 662. 二叉树最大宽度(BFS)
  3. 【算法设计与分析】流水作业调度问题 动态规划算法与代码实现 超详细
  4. S/4HANA extension field search的SQL语句是在什么地方生成的
  5. 深度学习之基于AlexNet实现猫狗大战
  6. 分布式数据库基础:分布式事务相关概念介绍
  7. 数据管理与商业智能_商业智能与数据科学
  8. Oracle的数据字典常用操作(持续更新)
  9. linux shell中怎样批量修改文件名为 文件夹_文件名
  10. 2018青岛ICPC ZOJ 4061: Magic Multiplication(模拟)
  11. 垃圾收集(GC)中如何确定哪些内存是垃圾
  12. 2022最新苹果群控同步投屏电脑/手机控制手机功能使用安装
  13. 第十一章 软件能力成熟度模型
  14. 程序设计基础II学习笔记
  15. Less系列之导入(Importing)
  16. bzoj1127 洛谷3474 题解
  17. Required request body is missing 问题解决
  18. java muti实现图片上传_使用MultipartFile实现文件上传
  19. 手机设备号到底是什么?
  20. 雅可比矩阵和行列式(Jacobian)

热门文章

  1. Windows mobile UI
  2. .Net并行库介绍——Task(1)
  3. python虚拟环境
  4. 实施和开发哪个前景好_web前端与java后台开发哪个前景、待遇好?
  5. android流量控制的实现,Android系统中P2P应用数据包捕获及流量控制研究
  6. 巩固好基础,才能学好Linux
  7. 如何扫描和修复 Linux 磁盘错误
  8. linux下clone一直运行,如何在Linux上使用clone()创建真正的线程?
  9. 无法安装此计算机不存在英特尔,win2008serverr2intel网卡驱动无法安装不存在英特尔PRO适配器的解决方法...
  10. Mysterious Bacteria LightOJ - 1220[唯一分解定理+思维题]