我有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));
答案 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__)