如何在cocos2dx中设置带参数的回调?
How to set a callback with parameters in cocos2dx?
通常,您可以使用 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));
我需要做什么才能创建参数已填充的函数的回调?
menuitem->setCallback(std::bind(MyClass::my_callback_with_param, this, 1);
在方法名称上调用 std::bind
,将 this
作为第一个参数传递,然后是您想要的任何其他参数。适用于无限变量。
通常,您可以使用 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));
我需要做什么才能创建参数已填充的函数的回调?
menuitem->setCallback(std::bind(MyClass::my_callback_with_param, this, 1);
在方法名称上调用 std::bind
,将 this
作为第一个参数传递,然后是您想要的任何其他参数。适用于无限变量。