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

问题描述 投票:0回答:2

我有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));
c++ cocos2d-x
2个回答
1
投票

看起来像param问题。你的call_quitItem是否需要Ref* sender?我记得它在v1.x中是可选的


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__)
© www.soinside.com 2019 - 2024. All rights reserved.