1.动作结束监听
Size visibleSize = Director::getInstance()->getVisibleSize(); //获取屏幕尺寸 Sprite* sprite = Sprite::create("sprite.png"); //创建一个精灵 sprite->setPosition(Point(visibleSize.width / 2,visibleSize.height / 2)); //设置精灵的初始位置 this->addChild(sprite); //将精灵加入到场景中 MoveTo* moveToHome = MoveTo::create(10.0f,Point(visibleSize.width,visibleSize.height / 2)); //创建一个移动动作 auto callbackFunc = [&]() { backHome(); }; CallFunc* callFunc = CallFunc::create(callbackFunc); Action* actions = Sequence::create(moveToHome,callFunc,NULL); sprite->runAction(actions); //执行动作 return true; } void HelloWorld::backHome() { Size visibleSize = Director::getInstance()->getVisibleSize(); Label* label = Label::create("I am home!","Arial",35); label->setPosition(Point(visibleSize.width / 2,visibleSize.height / 2)); this->addChild(label); }
[]符号就是表示要开始一个lambda函数了。
()里面填写函数的参数。
{}就是一个函数体。
[]:不截取任何变量。
[=,&h]:功能和[=]一样,只是是针对h变量来用的。
看下面代码
Sprite* sprite = Sprite::create("sprite.png"); sprite->setPosition(Point(200,200)); this->addChild(sprite); auto func = [&](){ sprite->setScale(2); }; CallFunc* callFunc = CallFunc::create(func); this->runAction(callFunc);我们创建了一个精灵,然后想要在func函数改变它的伸缩值。但是会报错的,这是因为我们使用的是[&]模式,这种模式无法在lambda函数里面使用局部变量,因为局部变量在调用lambda前就已经被释放了。这个精灵本身没有被释放,因为它已经在场景中了。但是sprite这个指针会被释放。