Cocos2dx 3.0 版本后加入了lambda表达式,或者说C++ 11终于引入了lambda表达式,那么,什么是lambda表达式呢?
例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:
- boolcompare(int&a,int&b)
- {
- returna>b;//降序排序
- }
------------------------------------------------------------------------
下面讲下在cocos2dx 3.0 应该如何使用lambda:
我先创建一个menu ,如果不使用labmda,menu里 item 需再写一个回调函数,如下:
默认情况下,即捕获字段为 [] 时,lambda表达式是不能访问任何外部变量的,即表达式的函数体内无法访问当前作用域下的变量。
如果要设定表达式能够访问外部变量,可以在 [] 内写入 & 或者 = 加上变量名,其中 & 表示按引用访问,= 表示按值访问,变量之间用逗号分隔,比如 [=factor,&total] 表示按值访问变量 factor,而按引用访问 total。
用 & 引用来举个例子:假设点击按钮后,我要创建一个精灵。修改callEnd:
恩,就这样子吧。
- //Makesprite1touchable
- autosprite1=Sprite::create();
- autolistener1=EventListenerTouchOneByOne::create();
- listener1->setSwallowTouches(true);
- listener1->onTouchBegan=[](Touch*touch,Event*event){
- autotarget=static_cast<Sprite*>(event->getCurrentTarget());
- returnfalse;
- };
- listener1->onTouchMoved=[](Touch*touch,Event*event){
- autotarget=static_cast<Sprite*>(event->getCurrentTarget());
- target->setPosition(target->getPosition()+touch->getDelta());
- };
- listener1->onTouchEnded=[=](Touch*touch,248); margin:0px!important; padding:0px 3px 0px 10px!important">_eventDispatcher->addEventListenerWithSceneGraPHPriority(listener1,sprite1);
本篇博客来自star特530,转载请注明出处。http://blog.csdn.net/start530/article/details/19913611
原文链接:https://www.f2er.com/cocos2dx/346638.html