我使用cocos2d-x一段时间了,有一个问题一直让我感到无聊: 我希望延迟按计划执行诸如“void f(int a)”之类的功能。但对于cocos2d-x,它无法在堆栈上传递变量:
int a = 10; //在延迟时调用f(a)
当然我可以使用CCInteger,CCxxx,但这样做太痛苦了。它只是cocos2d的副本,在cpp中真的很麻烦。
那么,是否有一种简单的方法让它执行std :: bind(f,a)?
答案 0 :(得分:0)
Cocos2d-x 3.0已经进入测试版 - 它支持c ++ 11,你可以在日程安排方法中使用lambda表达式 - 这里有一个非常全面的教程:http://www.cprogramming.com/c++11/c++11-lambda-closures.html
无论如何:使用CCInteger或其他cocos类传递数据的痛苦是什么?他们的目的是为了做到这一点。你到底想要达到什么目的?也许传递整个节点会是一个更好的主意吗?
答案 1 :(得分:0)
你可以试试c ++ 11的功能,这是我自己的代码:
定义CallbackHelper类
class CallbackHelper : public CCObject
{
private:
std::function<void ()> _func;
public:
static CallbackHelper* create(std::function<void ()> func) {
CallbackHelper* ret = new CallbackHelper();
if (ret) {
ret->autorelease();
} else {
CC_SAFE_DELETE(ret);
}
ret->_func = func;
return ret;
}
void run() {
_func();
}
};
制作CCCallFunC:
int a = 10;
CallbackHelper* callback = CallbackHelper::create([a](){
cout<<a<<endl;
});
CCCallFunc::create(callback, callfunc_selector(CallbackHelper::run));
祝你好运