通常,您可以使用CC_CALLBACK_X
为仅接受Ref*
参数的函数设置回调:
//cocos2dx builtins
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
typedef std::function<void(Ref*)> ccMenuCallback;
void MenuItem::setCallback(const ccMenuCallback& callback)
//my code starts here
MyClass::my_callback(Ref* sender) { ... };
MyClass::init()
{
auto menu = Menu::create();
auto menuitem = MenuItem::create();
menuitem->setCallback(CC_CALLBACK_1(MyClass::my_callback, this));
};
工作正常。
问题是说我有一个回调我想和另一个arg一起使用,比如说int
,我不知道如何让它工作。
MyClass::my_callback_with_param(Ref* sender, int arg1) { ... };
MyClass::my_callback_with_param_swapped(int arg1, Ref* sender) { ... };
//in the init func, I've tried stuff like
int an_int = 2
menuitem->setCallback(CC_CALLBACK_2(MyClass::my_callback_with_param, this, an_int));
//or changing the signature of the function
menuitem->setCallback(CC_CALLBACK_2(MyClass::my_callback_with_param_swapped, an_int, this));
//or using std::bind (which I'm not very familiar with)
menuitem->setCallback(CC_CALLBACK_1(std::bind(MyClass::my_callback_with_param, this, std::placeholders::_1) 1);
//or a lambda
menuitem->setCallBack(CC_CALLBACK_1([](Ref* sender){ }, this));
如果能够使用已填充参数的函数创建回调,我需要做什么?
答案 0 :(得分:0)
menuitem->setCallback(std::bind(MyClass::my_callback_with_param, this, 1);
在方法名称上调用std::bind
,将this
作为第一个参数传递,然后再传递其他任何内容。使用无限变量。