求助为什么这里的lambda不能用引用捕获?会报错!

C艾斯蒂嗯蟹 2018-04-25 11:36:42
图3中值传递没问题,引用就会报错,歪?







#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "ui/CocosGUI.h"
USING_NS_CC;

Scene* HelloWorld::createScene()
{
return HelloWorld::create();
}

// Print useful error message instead of segfaulting when files are not there.
static void problemLoading(const char* filename)
{
printf("Error while loading: %s\n", filename);
printf("Depending on how you compiled you might have to add 'Resources/' in front of filenames in HelloWorldScene.cpp\n");
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Scene::init() )
{
return false;
}

auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
// add "HelloWorld" splash screen"
sprite = Sprite::create("HelloWorld.png");
if (sprite == nullptr)
{
problemLoading("'HelloWorld.png'");
}
else
{
// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
// add the sprite as a child to this layer
this->addChild(sprite, 0);
}
/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.

// add a "close" icon to exit the progress. it's an autorelease object
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this, sprite));

if (closeItem == nullptr ||
closeItem->getContentSize().width <= 0 ||
closeItem->getContentSize().height <= 0)
{
problemLoading("'CloseNormal.png' and 'CloseSelected.png'");
}
else
{
float x = origin.x + visibleSize.width - closeItem->getContentSize().width/2;
float y = origin.y + closeItem->getContentSize().height/2;
closeItem->setPosition(Vec2(x,y));
}

// create menu, it's an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);

/////////////////////////////
// 3. add your codes below...

// add a label shows "Hello World"
// create and initialize a label

auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);
if (label == nullptr)
{
problemLoading("'fonts/Marker Felt.ttf'");
}
else
{
// position the label on the center of the screen
label->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - label->getContentSize().height));
this->addChild(label, 1);
}
auto pBut1 = ui::Button::create("CloseNormal.png","CloseSelected.png");
pBut1->setAnchorPoint(Vec2::ZERO);
pBut1->addTouchEventListener(CC_CALLBACK_2(HelloWorld::ContralMoveTest, this, sprite));
this->addChild(pBut1);

return true;
}
void HelloWorld::ContralMoveTest(Ref *sender,ui::Widget::TouchEventType controlEvent, Sprite* pSprite){
if (!isScheduled("HelloWorld::ContralMoveTest")){
this->schedule([=](float dt){
pSprite->setPositionX(pSprite->getPositionX() + 1.0f);
}, 0, -1, 0, "HelloWorld::ContralMoveTest");
}
//离开状态结束定时器
if (controlEvent == ui::Widget::TouchEventType::ENDED) {
this->unschedule("HelloWorld::ContralMoveTest");
}
}

void HelloWorld::menuCloseCallback(Ref* pSender, Sprite* pSprite)
{

}

void HelloWorld::SchedulerTest(float dt, Sprite* pSprite)
{
pSprite->setVisible(!pSprite->isVisible());
}
...全文
782 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
FSC_NLJY 2018-11-12
  • 打赏
  • 举报
回复
=是值类型的,&是引用类型的

726

社区成员

发帖
与我相关
我的任务
社区描述
Cocos2d-x相关内容讨论专区
社区管理员
  • Cocos2d-x
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧