怎么在schedule里传递参数

2025-05-21 03:49:15
推荐回答(1个)
回答1:

cocos2d-x 3.0使用了c++11的新特性std::bind,所以我们就可以用这个东西做很多很多的事了。我们可以将要回调的update函数多加上你要的几个参数,但是schedule中得要求函数的参数个数是一个啊,所以就用bind吧。这里用到的CC_CALLBACK_1宏底层就是用bind实现的,如果不理解以下的代码建议看下这个帖子http://www.cocoachina.com/bbs/read.php?tid=217556&fpage=2

bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}

auto scheduler = Director::getInstance()->getScheduler();
int i = 10;
std::string name = "xiaota";
scheduler->schedule(CC_CALLBACK_1(HelloWorld::update,this,&i,name),this,0.1f,-1,1,false,"hello");

return true;
}

//回调
void HelloWorld::update(float t,void * data,std::string name)
{
auto i = (int *)data;
log("%s",name.c_str());
log("%d",*i);
}