【已解决】怎么在schedule里传递参数呀?

cocos2dx里的时间调度函数schedul不是只能用参数为(float dt)的函数吗

但是为想要用参数除了float dt外还有其他的参数的函数

比如说 Hero是我定的一个类(他继承CCNode)
我想要每隔一段时间就调用Ob(Hero* pHero)函数
怎么办?

(是不是还要修改cocos2dx的源文件,我不会改T_T)

呃。。小伙伴们不用回答了。。
我用标签弄好了~:14:

LZ,怎么搞啊?

新手同问这个问题,求小伙伴们回答一下,那楼主是怎么解决这个问题的

汗,楼主都不知道分享,下次直接飘过不用看了

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);
}


```

不要对论坛失望哦,解决方案这不是来了么,看下楼上我的回复。

还是斑竹比较强大呀,赞一个,分享精神可嘉,不知道斑竹对lua熟不熟,我现在在lua里面调用这个,发现没法传参数刚才斑竹说的这个CC_CALLBACK_1不知道lua里面认不认,我是通过声明你说的这个update函数为类成员来调用的,但是貌似只要一声明为类成员就会报错(不声明为类成员是可以的)。不知道楼主对lua有研究不,这个东西现在比较流行

5楼小塔的回帖中,i是打印不出来的。因为下一帧执行时,i的生命周期已经结束了,i被释放了。这是比较常见的错误啊。。。

std::bind和std::function这个是c++的东西,lua里边有没有类似的语法我就不知道了,如果以后你找到了好的方法记得回帖啊。

在可以使用C++11特性的情况下,这方法很好很强大,要是不能使用这个特性情况下,还有其他办法吗?求指教!谢谢

传参问题完全可以用类成员变量来解决, 就是麻烦点, 还要初始化赋值销毁什么的…

还有一个问题,怎么知道一个schedule已经执行完了?比如,启动schedule_selector时执行20次,怎么知道20次已经执行完了?

为什么我用了你的方法schedule不认呢?

显示“没有参与匹配的重载函数”

schedule跑了起来,咋让停下了呀????

这样写,怎么取消定时啊,小塔

请问您怎么解决停止的

求回复啊,楼主,谢谢

this->unschedule(”key值“);

把回调写成一个方法, 然后在使用的地方,用function包装一层就行了,把自己需要的参数直接传进去.
function()
call(par1,par2)
end