cocos2dx里的时间调度函数schedul不是只能用参数为(float dt)的函数吗
但是为想要用参数除了float dt外还有其他的参数的函数
比如说 Hero是我定的一个类(他继承CCNode)
我想要每隔一段时间就调用Ob(Hero* pHero)函数
怎么办?
(是不是还要修改cocos2dx的源文件,我不会改T_T)
cocos2dx里的时间调度函数schedul不是只能用参数为(float dt)的函数吗
但是为想要用参数除了float dt外还有其他的参数的函数
比如说 Hero是我定的一个类(他继承CCNode)
我想要每隔一段时间就调用Ob(Hero* pHero)函数
怎么办?
(是不是还要修改cocos2dx的源文件,我不会改T_T)
呃。。小伙伴们不用回答了。。
我用标签弄好了~
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