您好,登錄后才能下訂單哦!
用Cocos Studio 2.3.2制作UI界面中控件不再支持運行3d動作特效
cocos2d-x + cocos studio無疑是當下二維手游開發的利器,但是在從舊版本向新版本的升級過程中,坑坑也的確不少。看到網絡上這方面的記錄多如牛毛,但又大多是只言片語,甚至于最可靠的官方網站上許多文檔也都十分過時。因此,深深覺得,要做成功一項開源項目的確很難,而這部分文檔教程又恐怕無非一個兩個員工所能為。感于此,繼續記錄下我這邊的踏坑中的只言片論,供參考。
1.以前試驗環境
cocos2d-x 2.2.3
CocoStudio 1.4.0.1
以前運行如下代碼OK:
UIButton* Button_Start = static_cast<UIButton*>(widget->getChildByName("Button_Start")); CCActionInterval* waves1 = CCWaves3D::create(10, CCSizeMake(15,10), 18, 5); Button_Start->runAction(CCRepeatForever::create(waves1));
恕不再奉上運行時截圖。
2.當前試驗環境
Cocos2d-x 3.8.1
Cocos Studio 2.3.2
當前運行如下代碼FAILED:
Button* Button_Start = static_cast<Button*>(Helper::seekWidgetByName(Panel_Back, "Button_Start")); auto waves1 = Waves3D::create(10, CCSizeMake(15,10), 18, 5); Button_Start->runAction(CCRepeatForever::create(waves1));
運行時錯誤截圖:
跟蹤源碼大致分析得知:運行上述Action的主體必須是GridNode類型。其實,上面圖中的_gridNodeTarget正是GridNode類型的指針。
3.cpp-tests中實例證明
參考源碼文件見EffectsAdvancedTest.cpp,相關代碼如下:
auto waves = Waves::create(5, Size(15,10), 5, 20, true, false); auto shaky = Shaky3D::create(5, Size(15,10), 4, false); _target1->runAction( RepeatForever::create( waves ) ); _target2->runAction( RepeatForever::create( shaky ) );
其中,_ target1和_target2都是NodeGrid指針類型。另外上面Waves替換成Waves3D也一樣,因為二者都繼承自Grid3DAction(參考下圖)。
注意上述文件中有關類似的代碼很多很多。
4.補充
第一,早期的上述3D動作特效只要求其運行實體對象為Node,當前版本的則要求其運行實體對象為NodeGrid,這正是上述運行時錯誤產生的根源。至于如何官方設計如此轉換,暫不得而知。不過我還是堅信官方技術一定會朝著越來越科學高效的目標發展,盡管其過程中存在多種問題。
第二,能否通過變通方式實現UI界面中的控件運行上述3D類Action呢?經過簡單分析,感覺很難,即使使用官方網站提到的自定制組件技術。記得早期版本開發過程中,就發現過不少的Studio中的控件技巧與直接在界面中添加的Node及其子類存在許多不致的方面,現在仍然如此!當然,想徹底弄清楚內在規律肯定需要花費不少時間。
5.Refs
(1)http://www.cocos.com/doc/article/index?type=cocostudio&url=/doc/cocos-docs-master//manual/studio/v4/chapter3/Extend/Directory/../WidgetExtend/zh.md
(2)http://www.cocoachina.com/bbs/read.php?tid=225481
(3)http://guandongsheng.iteye.com/blog/2091679
(4)http://my.oschina.net/Jacedy/blog/301575
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。