溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Cocos2d-x編程中CCRemoveSelf與CCCallFunc系列函數(shù)不能一起使用

發(fā)布時間:2020-08-10 10:26:31 來源:網(wǎng)絡(luò) 閱讀:665 作者:googlingman 欄目:游戲開發(fā)

可能是“頭暈”了,我在編碼中隨意寫出了如下代碼:

    CCLabelTTF* lbl=CCLabelTTF::create("Hi, you have succeeded in buying this Power-up!", "Arial", 32);
    lbl->setColor(ccc3(255,0,0));
    lbl->setPosition(VisibleRect::center());
    ul2->addChild(lbl,99);
    CCActionInterval*  scaleto = CCScaleTo::create(2.0f, 2.5f);
    CCActionInterval*  fadeout = CCFadeOut::create(2.0f);
    CCLog("********************************");
    CCAction*  s = CCSequence::create(
        CCDelayTime::create(1),        
        scaleto,
        fadeout,
        CCRemoveSelf::create(),
        CCCallFunc::create(this, callfunc_selector(StoreScene::callbackForBuyOK)), 
        NULL);
    lbl->runAction(s);
    //...
void StoreScene::callbackForBuyOK( CCObject* pSender )
{
    UIButton* btnBuy = dynamic_cast<UIButton*>(ul2->getWidgetByName("Button_Buy"));
    btnBuy->setEnabled(false);
}

我的想法很簡單,可能你也猜測出了,就是當(dāng)玩家購買某道具結(jié)束后,出現(xiàn)一個動態(tài)文字提示。而且,借助于CCRemoveSelf實(shí)現(xiàn)添加到場景中文本標(biāo)簽的自動移除。并且,在移除結(jié)束后,執(zhí)行一個簡短代碼。


但是,實(shí)際運(yùn)行上述代碼時出現(xiàn)如下運(yùn)行時錯誤:

Cocos2d-x編程中CCRemoveSelf與CCCallFunc系列函數(shù)不能一起使用


相信,上述錯誤你有所了解。搜索了一下網(wǎng)絡(luò),有朋友在
http://azykise.blog.163.com/blog/static/1730802442011616103252723/

處給出如下解釋:

這可能是函數(shù)調(diào)用約定不一致或者參數(shù)傳遞出錯。

函數(shù)調(diào)用約定主要約束了兩件事:

1.參數(shù)傳遞順序

2.調(diào)用堆棧由誰(調(diào)用函數(shù)或被調(diào)用函數(shù))清理

常見的函數(shù)調(diào)用約定:stdcall cdecl fastcall thiscall naked call

__stdcall表示

1.參數(shù)從右向左壓入堆棧

2.函數(shù)被調(diào)用者修改堆棧

3.函數(shù)名自動加前導(dǎo)的下劃線,后面緊跟一個@符號,其后緊跟著參數(shù)的尺寸

        用depends就可以看到函數(shù)的導(dǎo)出名。


而我的代碼運(yùn)行時錯誤停留在了如下位置:

Cocos2d-x編程中CCRemoveSelf與CCCallFunc系列函數(shù)不能一起使用


總之吧,根據(jù)上述錯誤,可以大致判斷出,錯誤在函數(shù)調(diào)用格式出了問題。結(jié)合上述圖片位置和前面的代碼,我大致判斷出了如本文題目所示的結(jié)論,即CCRemoveSelf與CCCallFunc系列函數(shù)不能一起使用!


其實(shí),進(jìn)一步想來,上述兩種Action也沒有必要一起使用。于是,前面的代碼可以修改為如下即可解決問題:

   

CCAction*  s = CCSequence::create(
        CCDelayTime::create(1),        
        scaleto,
        fadeout,
        CCRemoveSelf::create(),
        NULL);
    lbl->runAction(s);
    UIButton* btnBuy = dynamic_cast<UIButton*>(ul2->getWidgetByName("Button_Buy"));
    btnBuy->setEnabled(false);




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI