Sel_CallFuncN无法将void转换为Sel_CallFuncN

时间:2014-01-09 22:34:08

标签: cocos2d-x splash-screen

我正试图在我的游戏中获得一个介绍屏幕。几秒钟后它应该改变为游戏本身。

在我的introscreen类的Init中,我尝试制作一个序列,但是我收到以下错误:

  

无法从void类型转换为成员指针类型   'cocos2d :: SEL_CallFuncN'(又名   'void(cocos2d :: CCObject :: *)(cocos2d :: CCNode *)'

这是我的代码:

 bool IntroScreen::init() {
    if (!CCLayer::init()) {
        return false;
    }

    cocos2d::CCSize screenSize = cocos2d::CCDirector::sharedDirector()->getWinSize();

    cocos2d::CCSprite* logomarca = cocos2d::CCSprite::create("rayman_intro.png");
    logomarca->setPosition(ccp(screenSize.width / 2, screenSize.height / 2));
    this->addChild(logomarca, 1);

    cocos2d::CCFiniteTimeAction *seq1 = cocos2d::CCSequence::create(cocos2d::CCDelayTime::create(3.0),
                                                  cocos2d::CCCallFuncN::create(this,
                                                                               cocos2d::SEL_CallFuncN(cocos2d::CCDirector::sharedDirector()->replaceScene(Controller::scene())), NULL);

    this->runAction(seq1);

    return true;
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

SEL_CallFuncN中的

你应该把指针放到函数而不是函数

例如

 cocos2d::SEL_CallFuncN(IntroScreen::replace)

在替换中放入要调用的代码,如果使用CallFuncN,则您的方法应该在第一个参数位置为对象运行该函数

void IntroScreen::replace(CCObject* sender){
    cocos2d::CCDirector::sharedDirector()->replaceScene(Controller::scene();
}

答案 1 :(得分:0)

您可以在此使用scheduler代替CCFiniteTimeAction,而不是这样..

    this->scheduleOnce(schedule_selector(IntroScreen::replace), 3);


void IntroScreen::replace(CCObject* sender){
    cocos2d::CCDirector::sharedDirector()->replaceScene(Controller::scene();
}

同时在顶部插入“using namespace cocos2d;”语句,以避免在任何地方写入cocos2d::