位置: 编程技术 - 正文

Cocos2dx 3.0 lambda表达式的使用

发布时间:2024-02-27

推荐整理分享Cocos2dx 3.0 lambda表达式的使用,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Cocos2dx 3.0 版本后加入了lambda表达式,或者说C&#;&#; 终于引入了lambda表达式,那么,什么是lambda表达式呢?

例如调用<algorithm>中的std::sort,ISO C&#;&#; 的写法是要先写一个compare函数:

[cpp] view plaincopybool compare(int & a, int & b) { return a > b; // 降序排序 } 然后,再这样调用:[cpp] view plaincopysort(a, a&#;n, compare); 然而,用ISO C&#;&#; 标准新增的Lambda表达式,可以这么写:[cpp] view plaincopysort(a, a &#; n, [](int a, int b){return a > b;}); // 降序排序 这样一来,代码是不是简洁多了呢?

由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:

[cpp] view plaincopyauto f = [](int a, int b){return a > b;}); 和其它语言的一个较明显的区别是Lambda和C&#;&#;的类型系统结合使用,如:

[cpp] view plaincopy

auto f = [=](int a, int b){return a > x;}); //x被捕获复制 int x = 0, y = 1; auto g = [&](int x){return &#;&#;y;}); //y被捕获引用,调用g后会修改y,需要注意y的生存期 bool(*fp)(int, int) = [](int a, int b){return a > b;}); //不捕获时才可转换为函数指针 Cocos2dx 3.0  lambda表达式的使用

------------------------------------------------------------------------

下面讲下在cocos2dx 3.0 应该如何使用lambda:

我先创建一个menu ,如果不使用labmda,menu里 item 需再写一个回调函数,如下:

[cpp] view plaincopyauto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback,this)); void HelloWorld::menuCloseCallback(Object* sender) { Director::getInstance()->end(); } 使用了lambda后,可以这么使用:[cpp] view plaincopyauto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", [](Object* sender) { Director::getInstance()->end();//直接在这里添加按钮要调用的代码 }); 这种写法是不是简洁很多?当然了,也可以将回调 的代码单独取出来,这种写法的好处是可以多出调用callEnd。如下:[cpp] view plaincopyauto callEnd = [](Object* sender) { Director::getInstance()->end();//直接在这里添加按钮要调用的代码 }; auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", allEnd);

默认情况下,即捕获字段为 [] 时,lambda表达式是不能访问任何外部变量的,即表达式的函数体内无法访问当前作用域下的变量。如果要设定表达式能够访问外部变量,可以在 [] 内写入 & 或者 = 加上变量名,其中 & 表示按引用访问,= 表示按&#;访问,变量之间用逗号分隔,比如 [=factor, &total] 表示按&#;访问变量 factor,而按引用访问 total。用 & 引用来举个例子:假设点击按钮后,我要创建一个精灵。修改callEnd:

[cpp] view plaincopyauto callEnd = [](Object* sender) { auto sp = Sprite::create("Hello.png"); sp->setPosition(Point(,)); this->addChild(sp,);//这里报错 }; 上面这种写法是错误的,因为表达式无法访问当前作用于的变量。下面继续改代码:[cpp] view plaincopyauto callEnd = [&](Object* sender) { auto sp = Sprite::create("Hello.png"); sp->setPosition(Point(,)); this->addChild(sp,);//perfect }; 这样就没问题了。

上面的例子都只是简单的应用。在cocos2dx用到lambda 的地方还有很多,例如创建一个监听事件:

权作记录 cocos2dx 原文网址:

cocos2dx实现自定义2D地形 先来看看效果:对于2D地形的生成,可以采用2种方法,1.使用建模软件将2D的地形模型构建好直接使用Sprite3D导入优点:不需要太多程序控制,只是简单

cocos 3.x android下home键后,切回游戏时黑屏太久的问题 cocos3.x版本开发,按home键,再切回游戏,发现有时候,可以很快渲染出游戏的UI界面(1秒以内),有时候要很久(大概5秒),后来发现是因为activity的UI

标签: Cocos2dx 3.0 lambda表达式的使用

本文链接地址:https://www.jiuchutong.com/biancheng/372776.html 转载请保留说明!

上一篇:[置顶] Cocos3.4 横版游戏制作-《KillBear》-添加地图([置顶] 此外,车牌号:454118(懂得都懂[doge]))

下一篇:权作记录 cocos2dx

  • 进项税额转出的例题
  • 税务申报指的是什么
  • 发票开错抬头做红字发票的账务处理
  • 免税申报表里的免税销售额是不含税
  • 个体户和公司的经营范围有区别吗
  • 其他应收款包括应收利息吗
  • 季初资产总额是1,季末是0怎么填
  • 受托开发软件产品免征增值税
  • 驾驶培训费可以报销吗
  • 未认证的进项也就是库存
  • 弃置费用预计负债减少超过固定资产账面价值
  • 居民企业分红免征企业所得税分录
  • 员工基本养老保险缴纳比例
  • 总资产周转率ttm
  • 印花税按主营业务成本计算吗
  • 提现的现金支票是什么
  • 商业土地厂房办公房过户需要交什么税?
  • 免征增值税转入什么科目
  • 劳务费的现金流量是什么
  • 公允价值变动损益借贷方向
  • window10自带哪些软件
  • 如何增强无线网卡的接收能力
  • 公司投资理财产品
  • 银行汇票银行不予受理的是
  • centos6.5下载
  • 克罗地亚佩列沙茨
  • win10修改hosts文件权限
  • 公司承担的社保公积金怎么做账
  • svchost一直在下载什么
  • 营改增开始时间
  • 法罗群岛知乎
  • 发票抵税是怎么申报的
  • php通用分页类
  • 小企业法人怎么交社保
  • 微信小程序slot
  • yolov4参数设置
  • 无人驾驶基础知识
  • 十大经典排序算法(动图演示C 实现)
  • 图幅翻译
  • python连接网络
  • 酒的增值税专票可抵扣不
  • 增值税买一送一处理方法
  • 再生资源回收公司会计科目
  • 计入固定资产成本的税费有哪些
  • windows安装步骤总结
  • 购买商品或服务的人称为
  • 差旅费抵扣所得税标准
  • sql server更新数据
  • 员工为公司垫费合法吗
  • 出售投资所得属于什么科目
  • 什么时候开始取卵
  • 测试账户收入怎么处理
  • 人们对餐饮业的要求
  • 制造费用转入什么
  • 何为三证合一
  • 红字冲销有没有时间限制
  • 车辆转让怎么开票
  • mysql数据库主键怎么设置
  • linux动态库的制作
  • window10打开rar文件
  • windowxp怎么取消开机密码
  • win10系统如何快速回到桌面
  • win 10设置提醒
  • Win7注册表怎么恢复命令
  • ExtJS 2.0实用简明教程 之Border区域布局
  • cocos2d动画
  • unity获取mesh网格数据
  • [置顶]bilinovel
  • bootstrap需要学多久
  • clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
  • javascript高级程序设计第三版
  • js如何使用
  • python入门小程序编写
  • 个人可以到税务开物业费的
  • 国家税务总局全国增值税查询
  • 基层税务局长工作职责
  • 税务局落实双拥工作情况报告
  • 重庆经开区属于哪个大区
  • 中国一年能收多少税
  • 发票号码应与哪个号码一致
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号