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);}
CallFunc是一个看不见的动作,它的作用就是回调一个函数,它的动作就是调用这个函数。
callbackFunc就是一个lambda函数是一个匿名函数,一个最简单的lambda函数结构如下[](){} []符号就是表示要开始一个lambda函数了。 ()里面填写函数的参数。 {}就是一个函数体。
当我们想在lambda函数里使用外部的变量时,需要做一些改变,在[]符号里加上指定的符号,就可以指定变量捕获模式,常用的模式如下:
[]:不截取任何变量。 [&]:截取外部作用域中所有变量,并且作为引用在lambda函数中使用,可以简单的理解为,只要变量没有被释放,那么在lambda函数中都可以使用。但是局部变量不可以使用,因为局部变量会被释放。 [=]:截取外部作用域中所有变量,并复制一份在lambda函数中使用,即使外部变量的值改变了,但是在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这个指针会被释放。 总结
以上是内存溢出为你收集整理的【cocos2d-x游戏开发】动作事件的监听全部内容,希望文章能够帮你解决【cocos2d-x游戏开发】动作事件的监听所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)