亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉蟲記之控制場景文件中的骨骼動畫

2019-11-11 04:43:12
字體:
來源:轉載
供稿:網友

引子

這段時間一直努力在把早期版本的拇指接龍游戲(Cocos2d-x 2.2.3+CocoStudio 1.4.0.1)升級到當前相對穩定的高大上環境——Cocos2d-x 3.8.1+Cocos Studio 2.3.2。行程中遇到不少麻煩,時間不知不覺像流水一樣悄然逝去(這正是我時不時酸酸地想起“程序猿”三字的主要原因)。想之再三,還是努力記錄下來,一來為自己可能逝去的記憶,二來為一些新伙伴少踏幾個坑而節約些許時間。

本文討論的是在新版本中如何從代碼中控制在cocos Studio場景編輯器中加入的骨骼動畫的操作。

cpp-tests中的誤導

在升級之前就從網絡上及部分手頭圖書中了解到cocos2d-x 3.x版本中的較大變動。于是,還是很小心地決定先從研讀新版本發行中相伴隨的最經典的示例工程cpp-tests開始。在有了一個整體思路后,結合原來版本代碼開始更新,有的是代碼部分,有的是studio圖形數據部分,當然也包括該示例游戲涉及的有米積分墻SDK相關代碼的更新與ShareSDK集成部分的更新。

網絡搜索及研究示例工程cpp-tests的結果表明,官方的文檔有不少已經過時。但是,值得肯定的一點是工程cpp-tests中提倡盡量使用當前最新的cocos2d-x代碼操縱早期幾乎是各種版本studio導出的資源文件,還包括Flash動畫文件及Spine動畫文件,等等。

但遺憾的是,相應的官方資料中并沒有指出這一點。當然,在示例工程注釋中也沒有必要過于瑣碎地添加這種使用說明信息。

于是,對于像我這樣的新版本的發燒友來說,要使用其提供的最新技術主要有兩個途徑:一個是盡量全面地查看官方文檔(但是最新版本有關資料少得可憐),再一個就是閱讀SDK源碼。

如題中所示的“誤導”部分地體現在當前最新的cocos2d-x c++代碼操縱studio導出的動畫資源文件方面。

如果選擇開發語言是c++,那么對應的studio版本(2.3.2)的資料文件只能是.csb文件(場景文件、圖層文件、結點文件、骨骼動畫文件、3D場景文件的擴展名都是.csb)。

個別網絡資料上說是可以操縱studio版本(2.3.2)導出的json文件(如果選擇語言是javascript的話),我在嘗試后發現基本不可以,但不是完全不可以。源碼分析發現,這種方式導出的json文件與早期studio版本導出的exportjson文件或者json文件格式上存在很多的不一致。

因此,應該明確的一點就是對于使用cocos2d-x 3.8.1 C++代碼操作的studio版本(2.3.2)導出的資源文件的擴展名應當是.csb文件(二進制文件)。

但是,工程cpp-tests中的確存在大量的操作早期版本場景文件、GUI圖層文件、骨骼動畫文件的大量示例代碼,而官方文檔及這些文件注釋中又缺少必要的說明,因此很容易誤導初學者,而致使其浪費大量的時間進行可行性編碼試驗。

對于新版本環境下骨骼動畫的操作我還沒有全面試驗,因此僅作部分試驗結果說明。

來自www.cocoachina.com的啟示

在上述網站的《Cocos骨骼動畫功能解密》(http://www.cocoachina.com/cocos/20150907/13355.html)一文中我捕獲到如下最新的參考代碼。

12345678910111213141516171819202122232425262728//首先通過CSLoader讀入Cocos編輯器導出的csb文件,并將CSLoader返回的Node轉換為SkeletonNode*類型SkeletonNode* skeletonNode = static_cast(CSLoader::createNode("DemoPlayer.csb"));//獲得到骨骼節點之后,可以對骨骼節點的Scale、Position等進行設置skeletonNode->setScale(0.2f);skeletonNode->setPosition(150, 150);//然后將骨骼節點添加到父節點上this->addChild(skeletonNode);//接下來,再次通過CSLoader讀入Cocos編輯器導出的csb文件,創建一個ActionTimeline對象,這個對象存儲著骨骼節點的所有動畫ActionTimeline* action = CSLoader::createTimeline("DemoPlayer.csb");//我們為骨骼節點的動畫設置一個tag值方便后邊取出動畫,建議這里使用枚舉的形式來定義tag值(為了方便這里直接寫100了)action->setTag(100);skeletonNode->runAction(action);//播放action中的動畫(參數1:動畫名稱   參數2:是否循環播放)action->play("animation0"false);//我們可以通過每個骨骼節點上邊的某個皮膚(圖片)的名字來獲取這"塊"骨骼const std::string weapBoneName = "Layer20";auto weaponHandeBone = skeletonNode->getBoneNode(weapBoneName);//我們可以創建一個SPRite并把它加到剛剛獲取到的那"塊"骨骼的皮膚中auto weapSkinToAdd = Sprite::create("ArcherPeng/girl_arms.png");weapSkinToAdd->setName("Knife");weapSkinToAdd->setPosition(Vec2(135, 23));weapSkinToAdd->setScale(3.0f);weapSkinToAdd->setRotation(86);weaponHandeBone->addSkin(weapSkinToAdd, false);//加載到皮膚中//然后將新加入的皮膚顯示出來weaponHandeBone->displaySkin(weapSkinToAdd, true);//當然也可以換回原來的("3"指的是"3.png"原先皮膚的名字)weaponHandeBone->displaySkin("3"true);
1Node *node=CSLoader::createNode("DemoPlayer.csb");

是3.8.1 c++代碼加載studio 2.3.2導出的各種.csb二進制資源文件的統一方式。但是,根據本人浮淺分析:更細致的資料數據操縱示例工程中根本沒有提供。

 

初見天日

下面以我自己創建的一個簡單示例來說明如何從C++ 3.8.1代碼中操作studio 2.3.2導出的.csb文件。

首先,看一下我的示例工程截圖(我創建了一個場景文件MainScene.csd,其中加入的是一個骨骼動畫文件):

wKiom1ZJ0vfD_NNMAAIpvEfmcKM036.jpg

骨骼動畫文件是DemoPlayer.csd,如下,你一看就知道的。

wKiom1ZJ0siCu-jTAANS6uEhgzs191.jpg

接下來,問題的關鍵定位在:如何從cocos2d-x 3.8.1 c++代碼中操作上面導出的二進制資源MainScene.csb,并進而播放其中的骨骼動畫以及進行其他更細致的骨骼動畫行為控制。

在分析了上面代碼提示和綜合cpp-tests工程代碼后,我作出如下大膽嘗試:

123456789        Node * rootNode = CSLoader::createNode("MainScene.csb");         Node* child = rootNode->getChildByName("ProjectNode_1");           SkeletonNode* arm = static_cast<SkeletonNode*>(child);         addChild(arm);           ActionTimeline* action = CSLoader::createTimeline("MainScene.csb");         arm->runAction(action);         action->gotoFrameAndPlay(0);

部分缺憾

在cpp-tests中經常有如下代碼:

1       Node* _rootNode = SceneReader::getInstance()->createNodeWithSceneFile("res/MainScene.json");

恰巧,我的機器上有一個老版本的cocoStudio 1.4.0.1,其導出的場景文件正是json格式。試驗證明,使用cocos2d-x c++ 3.8.1通過上述代碼操作場景文件非常順利。當然,接下來,相應的進一步操作場景中對象的代碼也是沒有問題的,與示例工程中一致。

但是,簡單地源碼跟蹤發現,createNodeWithSceneFile文件也可以使用.csb文件作為參數。盡管沒有細致研究,但是試驗證明下面的代碼根本是行不通的。

12         Node* _rootNode = SceneReader::getInstance()->createNodeWithSceneFile("res/MainScene.csb");         Node* child = _rootNode->getChildByName("ProjectNode_1");

類似于上面的問題,示例工程中還存在不少,希望研究的同學們小心注意了。

 

 

【補充】

在示例文件SceneEditorTest.cpp 中的確存在使用上述方法,即createNodeWithSceneFile加載.csb文件的情形。例如下面所示的函數:

wKioL1ZJ4TOBKaTlAAH9rxeeokw291.jpg

 

注意,其中相關幫助函數loadFileChangeHelper代碼如下所示:

123456789101112131415161718192021void SceneEditorTestBase::loadFileChangeHelper(std::string& filePathName) {     std::string::size_type n = filePathName.find_last_of(".");  if(n == std::string::npos)   return;  filePathName = filePathName.substr(0,n);  if(_isCsbLoad)   filePathName.append(".csb");  else   filePathName.append(".json"); }

而上面的示例,即cpp-tests中的一部分在我的機器上是順利調試通過的。也就是說,createNodeWithSceneFile的確能夠加載.csb文件,但卻不是cocos studio 2.3.2導出的.csb文件。據我的估計,應該是早期版本studio導出的.csb文件。

 

怎么樣?感覺有些麻煩吧。不同的.csb文件居然有的能夠通過createNodeWithSceneFile加載,而有的不行!遺憾的是,官方沒有給出明確說明?。?!

 

 

 

 

小結

不敢多說一些,因為我到此的結論只停留在片面。但是,有一點基本是肯定的:當前的CPP-TESTS中對于早期STUDIO資源操作提供的示例已經非常豐富了,但相比之下,對于對應最新版本的STUDIO導出的二進制.csb文件的深入操作示例提供的非常欠缺。因此,這種情況下,要想使用最新版本的studio及相應版本的cocos2d-x 3.x版本,深入研究SDK源碼是必需的;但同時也要結合網絡上盡可能新的示例(特別是來自于cocoachina.com網絡的資源)進行。

 

登錄樂搏學院官網http://www.learnbo.com/

或關注我們的官方微博微信,還有更多驚喜哦~

本文出自 “青峰” 博客,請務必保留此出處http://zhuxianzhong.blog.51cto.com/157061/1713250


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲毛片在线观看| 日韩激情第一页| 久久资源免费视频| 国产欧美日韩中文字幕| 久久综合免费视频影院| 免费99精品国产自在在线| 亚洲国产成人久久| 欧美日韩免费一区| 亚洲影院色无极综合| 日韩精品视频三区| 国产性猛交xxxx免费看久久| 国产va免费精品高清在线| 97超级碰在线看视频免费在线看| 国产成人精品久久二区二区| 青青草一区二区| 国产精品永久在线| 国产精品老女人精品视频| 亚洲理论片在线观看| 色综合伊人色综合网| 日韩免费观看高清| 日本19禁啪啪免费观看www| 国产精品一区二区性色av| 欧美日韩999| 国产精品丝袜高跟| 91在线高清免费观看| 激情亚洲一区二区三区四区| 国产亚洲精品va在线观看| 国产精品美女www爽爽爽视频| 欧美日韩国产综合视频在线观看中文| 日韩精品视频免费专区在线播放| 国产做受69高潮| 亚洲欧美中文在线视频| 狠狠色狠狠色综合日日五| 国产成人精品日本亚洲专区61| 91网站在线免费观看| 欧美一级视频免费在线观看| 亚洲v日韩v综合v精品v| 国产成人精品一区二区三区| 这里只有精品在线观看| 色偷偷噜噜噜亚洲男人| 欧美老女人www| 日本国产高清不卡| 精品国产一区二区三区在线观看| 91精品久久久久久久久久入口| 日韩电视剧在线观看免费网站| 国产亚洲精品美女久久久| 成人中文字幕在线观看| 久久精品男人天堂| 日韩中文在线观看| 中文字幕日韩精品有码视频| 欧美自拍视频在线观看| 久久国产精品99国产精| 亚洲国产另类 国产精品国产免费| 成人黄色片网站| 欧美大尺度在线观看| 成人激情视频小说免费下载| 国产免费一区视频观看免费| 久久久精品免费视频| 国产成人在线一区二区| 欧美性猛交丰臀xxxxx网站| 国产精品99久久久久久久久| 国产成人综合一区二区三区| 狠狠色香婷婷久久亚洲精品| 国产性色av一区二区| 久久全球大尺度高清视频| 国产自摸综合网| 久久久久久久久电影| 4p变态网欧美系列| 欧美性感美女h网站在线观看免费| 伊人久久大香线蕉av一区二区| 久久精品欧美视频| 久久久黄色av| 国产精品久久久久久一区二区| 欧洲成人在线视频| 欧美亚洲在线观看| 成人欧美在线视频| 中文字幕精品av| 亚洲成人久久一区| 亚洲免费电影在线观看| 日韩成人中文电影| 色噜噜久久综合伊人一本| 亚洲天堂男人天堂| 亚洲综合在线小说| 91精品国产自产在线观看永久| 欧美第一黄色网| 日韩国产精品视频| 国产精品高清在线| 日本一区二区在线免费播放| 欧美成人午夜免费视在线看片| 福利视频第一区| 91亚洲精品久久久久久久久久久久| 黑人巨大精品欧美一区免费视频| 亚洲品质视频自拍网| 国产亚洲欧美aaaa| 国产深夜精品福利| 色狠狠久久aa北条麻妃| 欧美怡红院视频一区二区三区| 亚洲片国产一区一级在线观看| 亚洲tv在线观看| 日韩成人在线视频网站| 国产成人jvid在线播放| 欧美激情一区二区三区久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产欧美日韩精品丝袜高跟鞋| 欧美激情一区二区三区成人| 亚洲国产精品99| 日韩在线视频中文字幕| 欧美日韩精品在线播放| 日韩精品视频观看| 欧美理论电影网| 国产日韩精品一区二区| 日韩视频免费中文字幕| 色综合久久久888| 国产精品情侣自拍| 性色av一区二区三区| 亚洲第一福利网站| 国产精品草莓在线免费观看| 欧美成人一二三| 欧美性jizz18性欧美| 欧美国产高跟鞋裸体秀xxxhd| 91久热免费在线视频| 欧美人与性动交a欧美精品| 日韩成人在线观看| 日韩欧美中文字幕在线播放| 欧美性猛交xxxx免费看久久久| 欧美尤物巨大精品爽| 69**夜色精品国产69乱| 97国产精品久久| 国产成人avxxxxx在线看| 欧美大片在线看| 日韩av在线网| 日韩精品视频免费在线观看| 国产精品美女视频网站| 色综久久综合桃花网| 九色成人免费视频| 国产日韩精品入口| 日韩美女视频免费看| 国产在线拍揄自揄视频不卡99| 81精品国产乱码久久久久久| 2019亚洲男人天堂| 日韩大胆人体377p| 亚洲国产三级网| 亚洲色图av在线| 亚洲电影免费观看高清完整版在线观看| 午夜精品久久久久久久99热| 国产精品视频免费在线观看| 国产精品美女在线| 国产精品白嫩美女在线观看| 91精品久久久久久久久久久| 欧美性猛交xxxx免费看久久久| 浅井舞香一区二区| 欧美日韩免费区域视频在线观看| 久久影院中文字幕| 久久久久一本一区二区青青蜜月| 欧美日韩激情美女| 最近2019中文免费高清视频观看www99| 久久成人av网站| 亚洲精品国产精品久久清纯直播| 国产精品久久久久国产a级| 国产精品99一区| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美日韩视频一区| 欧美在线一区二区三区四| 精品亚洲国产成av人片传媒|