您好,登錄后才能下訂單哦!
可能是“頭暈”了,我在編碼中隨意寫出了如下代碼:
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); }
我的想法很簡單,可能你也猜測出了,就是當玩家購買某道具結束后,出現一個動態文字提示。而且,借助于CCRemoveSelf實現添加到場景中文本標簽的自動移除。并且,在移除結束后,執行一個簡短代碼。
但是,實際運行上述代碼時出現如下運行時錯誤:
相信,上述錯誤你有所了解。搜索了一下網絡,有朋友在
http://azykise.blog.163.com/blog/static/1730802442011616103252723/
處給出如下解釋:
這可能是函數調用約定不一致或者參數傳遞出錯。 函數調用約定主要約束了兩件事: 1.參數傳遞順序 2.調用堆棧由誰(調用函數或被調用函數)清理 常見的函數調用約定:stdcall cdecl fastcall thiscall naked call __stdcall表示 1.參數從右向左壓入堆棧 2.函數被調用者修改堆棧 3.函數名自動加前導的下劃線,后面緊跟一個@符號,其后緊跟著參數的尺寸 用depends就可以看到函數的導出名。 |
而我的代碼運行時錯誤停留在了如下位置:
總之吧,根據上述錯誤,可以大致判斷出,錯誤在函數調用格式出了問題。結合上述圖片位置和前面的代碼,我大致判斷出了如本文題目所示的結論,即CCRemoveSelf與CCCallFunc系列函數不能一起使用!
其實,進一步想來,上述兩種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);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。