如何在cocos2dx中设置带参数的回调?

时间:2015-01-04 04:20:06

标签: c++ cocos2d-x cocos2d-x-3.0

通常,您可以使用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));

如果能够使用已填充参数的函数创建回调,我需要做什么?

1 个答案:

答案 0 :(得分:0)

menuitem->setCallback(std::bind(MyClass::my_callback_with_param, this, 1);

在方法名称上调用std::bind,将this作为第一个参数传递,然后再传递其他任何内容。使用无限变量。