位置: 编程技术 - 正文

Cocos2dx 3.0 lambda表达式的使用

编辑:rootadmin

推荐整理分享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

  • 存货盘亏进项税额转出是什么意思
  • 无效产权转移的契税需要征收吗?
  • 税收优惠指什么
  • 运输发票抵扣联丢了
  • 当月红冲发票账务怎么处理
  • 电子承兑对方拒绝签收
  • 交通补贴算工资收入吗
  • 开票时间超限怎么办
  • 去年的进项发票今年还能抵扣吗
  • 挖掘机要交多少个人所得税
  • 固定资产未入固定资产账
  • 材料委托加工
  • 审计调整分录如何写
  • 并购对利润的影响
  • 收到小额贷款怎么做账
  • 无形资产换出
  • 代付电费开具发票账务处理
  • 认缴制下实收资本印花税
  • 企业拆迁补偿款要交哪些税
  • 发票验旧后可领新发票吗
  • 承租人交付房屋标准
  • 出票人账号是付款号吗
  • 管理费用没发票能入账吗
  • 暂估入库材料分录
  • 网速突然变差是什么原因
  • 个体工商户应申报套餐无增值税吗
  • 公司不经营了不注销可以吗
  • 跨年发票能不能开
  • 无线路由器怎么连接
  • 前端大屏适配几寸显示器
  • PHP:mime_content_type()的用法_fileinfo函数
  • 购买二手商住房没有给契税发票和购房发票
  • 未分配现付是什么意思
  • thinkphp框架作用
  • 育空领地
  • 前端数据加密的三种方式
  • chrome浏览器快捷方式
  • php开发项目
  • 金税盘锁死状态
  • vue viewui
  • 注意力机制加在什么位置
  • PHP模拟http请求的方法详解
  • 出口退税逾期申报,需申报出口货物收汇情况表
  • 公司组织员工旅游费可以在税前扣除吗
  • 小规模纳税人现代服务税率
  • 多用途卡的监管机构是
  • 收到失业保险稳岗补贴怎么做会计分录
  • 小规模企业没有员工如何申报个税
  • 所得税税率变化对已确认递延所得税资产的影响
  • 为在建工程发生的差旅费
  • 借款怎么收回来
  • 营改增对企业税负影响
  • 非营利性组织和营利性组织的区别
  • 旅游服务住宿费公司不给报销
  • 如何结转完工产品成本和已销产品成本
  • 企业对处于不同位置的产品或服务制定不同的价格
  • sql server怎么使用sql语句
  • 网页提示堆栈溢出怎么解决
  • win8支持固态硬盘吗
  • Win10预览版拆弹
  • linux终端基础命令
  • 用虚拟光驱安装系统教程
  • sguard是什么文件夹
  • 最小化安装centos7怎么装图形界面
  • mac如何恢复已删除文件
  • 任务管理器快捷键ctrl+alt+
  • win10系统自定义设置
  • linux命令eof
  • windows8无法安装wps
  • linux查看使用率命令
  • node modules干嘛的
  • cocos2dx4.0教程
  • unity3d插件手机版
  • 怎么配置nodejs的环境
  • JavaScript中的变量名不区分大小写
  • 在电子税务局如何增加税种
  • 深圳税务网上服务大厅官网
  • 新疆高龄补贴2024发放标准是多少
  • 公司收购农民的农产品能贴我公司标签吗
  • 小区活动宣传文案
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设