国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉蟲(chóng)記之控制場(chǎng)景文件中的骨骼動(dòng)畫(huà)

2019-11-11 03:08:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

引子

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

本文討論的是在新版本中如何從代碼中控制在cocos Studio場(chǎng)景編輯器中加入的骨骼動(dòng)畫(huà)的操作。

cpp-tests中的誤導(dǎo)

在升級(jí)之前就從網(wǎng)絡(luò)上及部分手頭圖書(shū)中了解到cocos2d-x 3.x版本中的較大變動(dòng)。于是,還是很小心地決定先從研讀新版本發(fā)行中相伴隨的最經(jīng)典的示例工程cpp-tests開(kāi)始。在有了一個(gè)整體思路后,結(jié)合原來(lái)版本代碼開(kāi)始更新,有的是代碼部分,有的是studio圖形數(shù)據(jù)部分,當(dāng)然也包括該示例游戲涉及的有米積分墻SDK相關(guān)代碼的更新與ShareSDK集成部分的更新。

網(wǎng)絡(luò)搜索及研究示例工程cpp-tests的結(jié)果表明,官方的文檔有不少已經(jīng)過(guò)時(shí)。但是,值得肯定的一點(diǎn)是工程cpp-tests中提倡盡量使用當(dāng)前最新的cocos2d-x代碼操縱早期幾乎是各種版本studio導(dǎo)出的資源文件,還包括Flash動(dòng)畫(huà)文件及Spine動(dòng)畫(huà)文件,等等。

但遺憾的是,相應(yīng)的官方資料中并沒(méi)有指出這一點(diǎn)。當(dāng)然,在示例工程注釋中也沒(méi)有必要過(guò)于瑣碎地添加這種使用說(shuō)明信息。

于是,對(duì)于像我這樣的新版本的發(fā)燒友來(lái)說(shuō),要使用其提供的最新技術(shù)主要有兩個(gè)途徑:一個(gè)是盡量全面地查看官方文檔(但是最新版本有關(guān)資料少得可憐),再一個(gè)就是閱讀SDK源碼

如題中所示的“誤導(dǎo)”部分地體現(xiàn)在當(dāng)前最新的cocos2d-x c++代碼操縱studio導(dǎo)出的動(dòng)畫(huà)資源文件方面。

如果選擇開(kāi)發(fā)語(yǔ)言是c++,那么對(duì)應(yīng)的studio版本(2.3.2)的資料文件只能是.csb文件(場(chǎng)景文件、圖層文件、結(jié)點(diǎn)文件、骨骼動(dòng)畫(huà)文件、3D場(chǎng)景文件的擴(kuò)展名都是.csb)。

個(gè)別網(wǎng)絡(luò)資料上說(shuō)是可以操縱studio版本(2.3.2)導(dǎo)出的json文件(如果選擇語(yǔ)言是javascript的話),我在嘗試后發(fā)現(xiàn)基本不可以,但不是完全不可以。源碼分析發(fā)現(xiàn),這種方式導(dǎo)出的json文件與早期studio版本導(dǎo)出的exportjson文件或者json文件格式上存在很多的不一致。

因此,應(yīng)該明確的一點(diǎn)就是對(duì)于使用cocos2d-x 3.8.1 C++代碼操作的studio版本(2.3.2)導(dǎo)出的資源文件的擴(kuò)展名應(yīng)當(dāng)是.csb文件(二進(jìn)制文件)。

但是,工程cpp-tests中的確存在大量的操作早期版本場(chǎng)景文件、GUI圖層文件、骨骼動(dòng)畫(huà)文件的大量示例代碼,而官方文檔及這些文件注釋中又缺少必要的說(shuō)明,因此很容易誤導(dǎo)初學(xué)者,而致使其浪費(fèi)大量的時(shí)間進(jìn)行可行性編碼試驗(yàn)。

對(duì)于新版本環(huán)境下骨骼動(dòng)畫(huà)的操作我還沒(méi)有全面試驗(yàn),因此僅作部分試驗(yàn)結(jié)果說(shuō)明。

來(lái)自www.cocoachina.com的啟示

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

12345678910111213141516171819202122232425262728//首先通過(guò)CSLoader讀入Cocos編輯器導(dǎo)出的csb文件,并將CSLoader返回的Node轉(zhuǎn)換為SkeletonNode*類型SkeletonNode* skeletonNode = static_cast(CSLoader::createNode("DemoPlayer.csb"));//獲得到骨骼節(jié)點(diǎn)之后,可以對(duì)骨骼節(jié)點(diǎn)的Scale、Position等進(jìn)行設(shè)置skeletonNode->setScale(0.2f);skeletonNode->setPosition(150, 150);//然后將骨骼節(jié)點(diǎn)添加到父節(jié)點(diǎn)上this->addChild(skeletonNode);//接下來(lái),再次通過(guò)CSLoader讀入Cocos編輯器導(dǎo)出的csb文件,創(chuàng)建一個(gè)ActionTimeline對(duì)象,這個(gè)對(duì)象存儲(chǔ)著骨骼節(jié)點(diǎn)的所有動(dòng)畫(huà)ActionTimeline* action = CSLoader::createTimeline("DemoPlayer.csb");//我們?yōu)楣趋拦?jié)點(diǎn)的動(dòng)畫(huà)設(shè)置一個(gè)tag值方便后邊取出動(dòng)畫(huà),建議這里使用枚舉的形式來(lái)定義tag值(為了方便這里直接寫(xiě)100了)action->setTag(100);skeletonNode->runAction(action);//播放action中的動(dòng)畫(huà)(參數(shù)1:動(dòng)畫(huà)名稱   參數(shù)2:是否循環(huán)播放)action->play("animation0"false);//我們可以通過(guò)每個(gè)骨骼節(jié)點(diǎn)上邊的某個(gè)皮膚(圖片)的名字來(lái)獲取這"塊"骨骼const std::string weapBoneName = "Layer20";auto weaponHandeBone = skeletonNode->getBoneNode(weapBoneName);//我們可以創(chuàng)建一個(gè)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);//加載到皮膚中//然后將新加入的皮膚顯示出來(lái)weaponHandeBone->displaySkin(weapSkinToAdd, true);//當(dāng)然也可以換回原來(lái)的("3"指的是"3.png"原先皮膚的名字)weaponHandeBone->displaySkin("3"true);
1Node *node=CSLoader::createNode("DemoPlayer.csb");

是3.8.1 c++代碼加載studio 2.3.2導(dǎo)出的各種.csb二進(jìn)制資源文件的統(tǒng)一方式。但是,根據(jù)本人浮淺分析:更細(xì)致的資料數(shù)據(jù)操縱示例工程中根本沒(méi)有提供。

 

初見(jiàn)天日

下面以我自己創(chuàng)建的一個(gè)簡(jiǎn)單示例來(lái)說(shuō)明如何從C++ 3.8.1代碼中操作studio 2.3.2導(dǎo)出的.csb文件。

首先,看一下我的示例工程截圖(我創(chuàng)建了一個(gè)場(chǎng)景文件MainScene.csd,其中加入的是一個(gè)骨骼動(dòng)畫(huà)文件):

wKiom1ZJ0vfD_NNMAAIpvEfmcKM036.jpg

骨骼動(dòng)畫(huà)文件是DemoPlayer.csd,如下,你一看就知道的。

wKiom1ZJ0siCu-jTAANS6uEhgzs191.jpg

接下來(lái),問(wèn)題的關(guān)鍵定位在:如何從cocos2d-x 3.8.1 c++代碼中操作上面導(dǎo)出的二進(jìn)制資源MainScene.csb,并進(jìn)而播放其中的骨骼動(dòng)畫(huà)以及進(jìn)行其他更細(xì)致的骨骼動(dòng)畫(huà)行為控制。

在分析了上面代碼提示和綜合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中經(jīng)常有如下代碼:

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

恰巧,我的機(jī)器上有一個(gè)老版本的cocoStudio 1.4.0.1,其導(dǎo)出的場(chǎng)景文件正是json格式。試驗(yàn)證明,使用cocos2d-x c++ 3.8.1通過(guò)上述代碼操作場(chǎng)景文件非常順利。當(dāng)然,接下來(lái),相應(yīng)的進(jìn)一步操作場(chǎng)景中對(duì)象的代碼也是沒(méi)有問(wèn)題的,與示例工程中一致。

但是,簡(jiǎn)單地源碼跟蹤發(fā)現(xiàn),createNodeWithSceneFile文件也可以使用.csb文件作為參數(shù)。盡管沒(méi)有細(xì)致研究,但是試驗(yàn)證明下面的代碼根本是行不通的。

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

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

 

 

【補(bǔ)充】

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

wKioL1ZJ4TOBKaTlAAH9rxeeokw291.jpg

 

注意,其中相關(guān)幫助函數(shù)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中的一部分在我的機(jī)器上是順利調(diào)試通過(guò)的。也就是說(shuō),createNodeWithSceneFile的確能夠加載.csb文件,但卻不是cocos studio 2.3.2導(dǎo)出的.csb文件。據(jù)我的估計(jì),應(yīng)該是早期版本studio導(dǎo)出的.csb文件。

 

怎么樣?感覺(jué)有些麻煩吧。不同的.csb文件居然有的能夠通過(guò)createNodeWithSceneFile加載,而有的不行!遺憾的是,官方?jīng)]有給出明確說(shuō)明!!!

 

 

 

 

小結(jié)

不敢多說(shuō)一些,因?yàn)槲业酱说慕Y(jié)論只停留在片面。但是,有一點(diǎn)基本是肯定的:當(dāng)前的CPP-TESTS中對(duì)于早期STUDIO資源操作提供的示例已經(jīng)非常豐富了,但相比之下,對(duì)于對(duì)應(yīng)最新版本的STUDIO導(dǎo)出的二進(jìn)制.csb文件的深入操作示例提供的非常欠缺。因此,這種情況下,要想使用最新版本的studio及相應(yīng)版本的cocos2d-x 3.x版本,深入研究SDK源碼是必需的;但同時(shí)也要結(jié)合網(wǎng)絡(luò)上盡可能新的示例(特別是來(lái)自于cocoachina.com網(wǎng)絡(luò)的資源)進(jìn)行。

 

登錄樂(lè)搏學(xué)院官網(wǎng)http://www.learnbo.com/

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙江县| 洪湖市| 恩平市| 乳源| 泾川县| 禹州市| 亳州市| 宜川县| 高碑店市| 平舆县| 永兴县| 都昌县| 吉林省| 房产| 韶关市| 信丰县| 卫辉市| 象山县| 广灵县| 汕尾市| 祁阳县| 清远市| 社旗县| 离岛区| 兴隆县| 龙江县| 康乐县| 临沧市| 九龙坡区| 镇江市| 渝北区| 光山县| 宽甸| 西吉县| 平塘县| 建瓯市| 小金县| 镇安县| 肇源县| 砀山县| 乌拉特前旗|