91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CocoStudio Test 詳盡解析

發布時間:2020-08-27 22:09:06 來源:網絡 閱讀:1600 作者:原罪雷霆 欄目:游戲開發

 CocoStudio工具的發布讓人振奮(雖然還有不少的問題,但是瑕不掩瑜)

不得不說,作為只有Windows電腦的屌絲能有這么好的免費開發工具確實很開心

但是作為一款剛發布的工具,官方自己也在趕制使用教程,使用上還是有一定難度的。

由于官方正在趕制使用Editor的視頻,這里我就不說這方面的問題了,想看可以去下面網址觀看:

http://i.youku.com/u/UNTk3MDQ4NzA0(截止今天只有兩部,分別是動畫與UI編輯器的)

 

我想看了如上視頻對于如何使用該工具有了一個大概的了解,但是也會有一個疑問,那就是該工具導出的文件如何使用,尤其是.json文件。

好在官方有一個test讓我們參考,接下來就來分析下這個官方的test(可以在 http://www.cocos2d-x.org/projects/studio/wiki 下載到,這是官方地址)

先看看運行效果(我個人認為還比較有愛):

CocoStudio Test 詳盡解析

這個Test相較于一般的Cocos2d-x程序多了兩個庫,第一個是UI庫,第二個是動畫庫(我是這么認為的)。

由于該Test中只用到了很少一部分動畫庫(我簡要看了一下之后發現確實也只需要這部分就可以顯示動畫了,其他很多接口都是它內部調用的而已)而沒有任何文檔說明,所以就沒仔細看動畫庫,轉而仔細研究了下UI庫。

那么先來看一下HelloWorldScene.cpp的init代碼吧

  1. bool HelloWorld::init() 
  2.     // 1. super init first 
  3.     if ( !CCLayer::init() ) 
  4.     { 
  5.         return false
  6.     } 
  7.  
  8.     COCOUISYSTEM->init(); 
  9.     //COCOUISYSTEM->resetSystem(this); 
  10.  
  11.     COCOUISYSTEM->replaceUISceneWithFile(this"CocoGUISample.json", 1, false); 
  12.  
  13.  
  14.     CocoGUI::CocoButton* closeButton = CocoGUI::CocoButton::create(); 
  15.     closeButton->setTextures("CloseNormal.png""CloseSelected.png"""); 
  16.     closeButton->setPosition(ccp(430, 40)); 
  17.     closeButton->setBeTouchAble(true); 
  18.     closeButton->addReleaseEvent((CCObject*)this, coco_releaseselector(HelloWorld::menuCloseCallback)); 
  19.     COCOUISYSTEM->getCurScene()->addWidget(closeButton); 
  20.  
  21.     CocoGUI::CocoScrollView* sc = (CocoGUI::CocoScrollView*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "scrollview")); 
  22.     sc->setUpdateEnable(true); 
  23.     CocoGUI::CocoTextButton* bt = (CocoGUI::CocoTextButton*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "backtotopbutton")); 
  24.     bt->addReleaseEvent(this, coco_releaseselector(HelloWorld::backToTop)); 
  25.     CocoGUI::CocoSlider* sld = (CocoGUI::CocoSlider*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "slider")); 
  26.     sld->addPercentChangedEvent(this, coco_percentchangedselector(HelloWorld::sliderPercentChanged)); 
  27.     CocoGUI::CocoButton* anib = (CocoGUI::CocoButton*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "animationbutton")); 
  28.     anib->addReleaseEvent(this, coco_releaseselector(HelloWorld::playUIAnimation)); 
  29.  
  30.     cs::BatchNodeManager::sharedBatchNodeManager()->initWithLayer(this"TEST_LAYER"); 
  31.  
  32.     cs::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("TestBone""""TestBone0.png""TestBone0.plist""TestBone.json"); 
  33.  
  34.     armature = cs::Armature::create("TestBone"); 
  35.     armature->getAnimation()->playByIndex(0); 
  36.     armature->setScale(0.3); 
  37.     armature->setPosition(300, 0); 
  38.     addChild(armature); 
  39.  
  40.  
  41.     return true

COCOUISYSTEM這是一個宏,用來獲取一個UISystem對象:#define COCOUISYSTEM CocoGUI::UISystem::shareSystem()

這個UISystem之后再說,往下繼續看

COCOUISYSTEM->resetSystem(this); 這一段本來是沒有注釋的,但在這里確實是沒有任何作用的一段代碼

這個resetSystem是用來重置當前場景的UI的(注意,是重置CocoStudio的UI,你自己添加的任何普通對象都會保留)有興趣可以去看一下這個的源碼,這里就不貼了

resetSystem用來作為初始化時的重置是沒任何問題的,但是為什么說它在這里沒用呢?

因為這句話的存在COCOUISYSTEM->replaceUISceneWithFile(this"CocoGUISample.json", 1, false);

replaceUISceneWithFile之中調用也調用過一次resetSystem,所以說resetSystem是重復多余的

replaceUISceneWithFile的作用就是通過json載入編輯器做好的UI

其四個參數分別是UI目標,也就是添加UI的對象指針,配置文件,讀取方式(1為json文件,0為plist文件),最后一個是是否允許自適應。

后面幾行是生成一個CocoButton,也就是CocoStudio自己的UI控件

這里要說一下,CocoButton的控件幾乎都是自己重寫的,不繼承于Cocos2d-x的控件,其觸碰分派也是獨立的,這里以后再說。

然后就是把控件add到當前場景中:COCOUISYSTEM->getCurScene()->addWidget(closeButton); 

前面說過了,這些空間都是重寫的,而且不是繼承于CCNode,所以不能直接用addChild來add,而是通過UISystem來add,并且通過UISystem來管理的,也就是說Remove也不是通過this.remove而是通過COCOUISYSTEM->getCurScene()->removeWidgetAndCleanUp

后面的幾行差不多,就說下第一行

CocoGUI::CocoScrollView* sc = (CocoGUI::CocoScrollView*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "scrollview")); 

這一行就是關鍵中的關鍵了,在UI編輯器中只能編輯樣子,不能添加事件,時間的添加只能在代碼中添加,而獲取對象則是添加的關鍵。

CocoStudio就是通過UISystem中的checkWidgetByName來獲取對象的

其參數分別為:當前場景的rootwidget和對象名稱(UI編輯器中使用的)

這樣就可以對控件進行一系列修改,也包括最重要的添加事件了

比如CocoTextButton對象:

bt->addReleaseEvent(this, coco_releaseselector(HelloWorld::backToTop)); 

當然了,不同的對象是不一樣的,比如CocoSlider就是

sld->addPercentChangedEvent(this, coco_percentchangedselector(HelloWorld::sliderPercentChanged)); 

這個要靠大家自己根據情況來定了

最后就是一個骨骼動畫了

cs::BatchNodeManager::sharedBatchNodeManager()->initWithLayer(this, "TEST_LAYER");

這是創建一個BatchNodeManager對象(其實準確來說是在HelloWorld層中創建了一個名為TEST_LAYER的對象)用來管理BatchNode(繼承于CCSpriteBatchNode,這個的作用就不用多說了吧)

cs::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("TestBone", "", "TestBone0.png", "TestBone0.plist", "TestBone.json");

終于開始創建動畫了,可以看得出來,這個動畫是直接加入到動畫管理器中的,要用的時候通過名字從動畫管理器中獲取相應動畫

armature = cs::Armature::create("TestBone");

然后設置一些屬性

 

armature->getAnimation()->playByIndex(0);

armature->setScale(0.3);

armature->setPosition(300, 0);

addChild(armature);

playByIndex這個的作用就是從第n幅圖片開始播放,這里是從0開始

從使用addChild就可以看出來,Armature繼承于CCNodeRGBA

整個Test大致包含了這么多內容,其他的需要等官方給更多的Test或者文檔或者直接看源碼來了解了。

 

如果官方明天沒有給出文檔的話(當然我覺得不太可能)我想說一下我對于UISystem的一些小領悟,如果官方給出文檔的話,我就不獻丑了= =

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克拉玛依市| 大竹县| 阜新市| 石渠县| 尚志市| 杭锦旗| 鄯善县| 博白县| 永嘉县| 西贡区| 民县| 太保市| 云梦县| 龙岩市| 甘谷县| 庄浪县| 苏州市| 盐亭县| 乐亭县| 公主岭市| 青神县| 尼勒克县| 鄂尔多斯市| 阿克陶县| 黄龙县| 酉阳| 当雄县| 林周县| 伊通| 仪陇县| 资兴市| 广州市| 和顺县| 哈密市| 渑池县| 铅山县| 轮台县| 连州市| 马边| 克东县| 秦安县|