如何在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 作为第一个参数传递,然后是您想要的任何其他参数。适用于无限变量。