2

cocos2d-xでは、次のコードが遅延後にコールバック関数を実行することになっています。エラーを修正するにはどうすればよいですか?

bool LoadingLevelScreen::initialise() {

        // set up the time delay
    CCDelayTime *delayAction = CCDelayTime::actionWithDuration(0.5f);

    // perform the selector call
    CCCallFunc *callSelectorAction = CCCallFunc::actionWithTarget( 
        this, callfunc_selector( LoadingLevelScreen::menuCallbackStart ) );

    // run the action
    this->runAction( CCSequence::actions(
        delayAction, callSelectorAction, NULL ) );
}

void LoadingLevelScreen::menuCallbackStart(CCObject * pSender)
{
}

コンパイラエラー:

error C2440: 'type cast' : 
cannot convert from 'void (__thiscall LoadingLevelScreen::* )(cocos2d::CCObject *)' 
to 'cocos2d::SEL_CallFunc'
Pointers to members have different representations; cannot cast between them
4

4 に答える 4

5

CCObject*メソッド内のパラメーターを削除するかmenuCallbackStart()CCCallFunc::actionWithTarget()引数のないメソッドを期待するため)、次のように、引数としてのメソッドを期待するように変更CCCallFuncします。CCCallFuncOCCObject*

CCCallFuncO * callSelectorAction =
    CCCallFuncO::create(this, &LoadingLevelScreen::menuCallbackStart, myObject);

ここmyObjectで、CCObject *は引数としてメソッドに渡されます。

これは、メソッドを次callfunc_selector()のようにタイプキャストする単なるマクロであることに注意してください。SEL_CallFunc

#define callfunc_selector(MYSELECTOR) (SEL_CallFunc)(& (MYSELECTOR))

ところで::actionWithTarget()、非推奨になっているので、::create()代わりに使用してください。

于 2012-08-14T18:58:48.780 に答える
3
void LoadingLevelScreen::menuCallbackStart(CCObject * pSender)
{
}

する必要があります

void LoadingLevelScreen::menuCallbackStart()
{
}

callfunc_selectorはmenu_selectorとは異なり、CCObject*を変数として渡す必要はありません。

引数を渡す必要がある場合は、callFuncNDを使用してください

于 2012-08-12T22:59:59.320 に答える
1

this-> runAction(Sequence :: create(CallFunc :: create(std :: bind(&CNm :: MNm、this))、NULL));

于 2015-10-02T05:55:05.140 に答える
0

this-> runAction(Sequence :: create(CallFunc :: create(std :: bind(&ClassName :: MethodName、this))、NULL));

于 2015-09-30T13:14:27.380 に答える