Cocos2d-x编程中CCRemoveSelf与CCCallFunc系列函数不能一起使用
可能是“頭暈”了,我在編碼中隨意寫出了如下代碼:
????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);總結
以上是生活随笔為你收集整理的Cocos2d-x编程中CCRemoveSelf与CCCallFunc系列函数不能一起使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EF架构~LinqToEntity里实现
- 下一篇: python爬虫----(4. scra