这对Cocos2dx中的“callfuncN_selector”意味着什么?

时间:2015-07-14 08:57:42

标签: c++ cocos2d-x visual-studio-express

我想在visual studio中运行我的第一个项目,但是你看它似乎有两个错误,我不知道它们是什么意思

void CCloud::Start(){

    this->stopAllActions();

    float currentX = this->getPositionX();
    float distance = currentX - -(_xOffset);
    float time = distance / _pixelsPerSec;
    CCPoint destination = ccp(-_xOffset, this->getPositionY());

    CCMoveTo *actionMove = CCMoveTo::create(time, destination);
    CCCallFuncN *actionMoveDone = CCCallFuncN::create(this, callfuncN_selector(CCloud::ReachedDestionation));

    this->runAction(CCSequence::create(actionMove, actionMoveDone, NULL));

}

这两个错误是:

错误1错误C2440:'type cast':无法从'void(__ thiscall CCloud :: *)(void)'转换为'cocos2d :: SEL_CallFuncN'

C:\ Users \ sergi_000 \ Downloads \ cocos2d-x-2.2.3 \ projects \ myfirstapp \ Classes \ CCloud.cpp 27 1 HelloCpp

错误2错误C2665:'cocos2d :: CCCallFuncN :: create':2个重载中没有一个可以转换所有参数类型

C:\ Users \ sergi_000 \ Downloads \ cocos2d-x-2.2.3 \ projects \ myfirstapp \ Classes \ CCloud.cpp 27 1 HelloCpp

如果有人能帮助我,我会很高兴,谢谢!

3 个答案:

答案 0 :(得分:1)

指向成员函数的指针与指向非成员函数的指针不同。指向成员函数的指针需要调用实例。

通常的解决方案是,具有回调功能的库允许用户设置某种"用户数据"然后您可以将其设置为对象实例。然后创建一个回调包装器函数,通常作为static成员函数(可以用作普通的非成员函数指针),并在其中获取用户数据,将其转换为正确的类,并调用你真正想要调用的函数。

警告:我不知道cocos2d-x是否支持回调用户数据。

答案 1 :(得分:0)

就我而言,#define callfuncN_selector(_SELECTOR) CC_CALLFUNCN_SELECTOR(_SELECTOR)已被弃用。你不应该使用它。

此外,CCloud :: ReachedDestionation需要一个函数,它将CCNode *(也已弃用)作为输入。检查您的示例中是否为真,或者在此处发布源代码,以便我可以获得更好的答案。

最后(但并非最不重要) - 通常不错的做法是尽量不使用弃用的方法,因为它通常意味着引擎有更好的机会。

答案 2 :(得分:-1)

您应该使用以下代码:

enter image description here