带回调函数的cocos2d-x菜单项错误

时间:2017-12-19 05:49:48

标签: c++ cocos2d-x

我有5年前的代码:

CCMenuItemSprite* quitItem = CCMenuItemSprite::create(quitLabel,quitLabel2,quitLabel3,this,menu_selector(ClearScene::call_quitItem));

我重构代码并迁移到最新的cocos2d-x。上面的例子一直给我错误:

error: invalid static_cast from type 'void (MyScene::*)()' to type 'cocos2d::SEL_SCHEDULE {aka void (cocos2d:Ref::*)(float)}'

我尝试使用CC_CALLBACK_n但仍然无效。 (类似于HelloWorld.cpp文件:

auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

2 个答案:

答案 0 :(得分:1)

看起来像param问题。您的call_quitItem需要Ref* sender吗?我记得它在v1.x

中是可选的

答案 1 :(得分:0)

call_quitItem方法中有多少参数?

<强> CC_CALLBACK_N

(N)数表示回调函数有多少参数。 CC_CALLBACK_0表示没有输入参数的回调函数,例如MyClass::doSomething()

CC_CALLBACK_1表示只有1个输入参数。例如,MyClass::doSomething(int a)

// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)