CocoStudio Test 解密
昨天,上傳了官方更新的 CocoStudio Test。今天看了下,CocoStudio 的功能還真是我們現在所需要的,因爲是第一版嘛,瑕疵是在所難免的。不過還是很期待這個工具未來會有多強大。好了,廢話少說,今天我們來介紹下 Test 中所用到的 CocoStudio 代碼。
工程昨天我已經上傳完畢了,地址:http://down.51cto.com/data/751925
下載完畢解壓到任意位置。我們會看到下圖,我們打開CocoStuioTestCPP.sln
這個工程最低需要 VS2010 所以,還在堅守 2008 的同學們要熟悉一下新工具了。打開後,我們會發現下圖,而我們需要用到的是紅框內的工程。
我們可以試着先運行下。
很有愛的 Test,是不是很流暢,大家可以試着動動界面上的控件,這裏我就不做過多介紹了哈,我們今天的目的是要知道,如何去加載這些東西。
我們點開source,然後打開其中的HelloWorldScene.cpp,Test 中進行操作的代碼全部都在這裏了。
下面,我們來看一下HelloWorldScene 中的 init() 方法。
if ( !CCLayer::init())
{
return false; //這句就不介紹了哈,大家都懂。不懂先去學習Cococs2D-X吧。
}
- //初始化CocoStudioUI模塊
- COCOUISYSTEM->init();
- //設置根Layer
- COCOUISYSTEM->resetSystem(this);
- //利用根Layer Scene配置json 1 還有是否開啓高清模式.來初始化一個場景
- COCOUISYSTEM->replaceUISceneWithFile(this, "CocoGUISample.json", 1, true);
這裏就是用來初始化我們的COCO模塊。註釋可能是根據個人理解哈,不懂的同學可以留言。這裏其實有個不影響運行的BUG 其實第二句代碼是可以去掉的,因爲第三句中,也進行了一次這樣的操作,不知道是不是大拿們太辛苦給遺漏了。
- //創建一個CocoButton
- CocoGUI::CocoButton* closeButton =CocoGUI::CocoButton::create();
- //爲CocoButton指定貼圖
- closeButton->setTextures("CloseNormal.png", "CloseSelected.png", "");
- //設置位置
- closeButton->setPosition(ccp(430, 40));
- //設置按鈕是否可以觸摸
- closeButton->setBeTouchAble(true);
- //添加按鈕彈起時的事件
- closeButton->addReleaseEvent((CCObject*)this, coco_releaseselector(HelloWorld::menuCloseCallback));
- //把這個按鈕添加到當前場景中
- COCOUISYSTEM->getCurScene()->addWidget(closeButton);
這段代碼,就是如何在程序中創建一個CocoStduio的控件,這裏是創建的Button,在下面又給他指定了相應的事件相應方法。
- //獲得ScrollView這個對象
- CocoGUI::CocoScrollView* sc = (CocoGUI::CocoScrollView*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "scrollview"));
- //開啓更新 就是滑動後慣性滑動
- sc->setUpdateEnable(true);
這裏我們就可以用代碼,來獲取界面上的控件,來對他們操作了。這一點比CocosBuilder犀利多了吧。
- //獲得scrollview上面的返回按鈕
- CocoGUI::CocoTextButton* bt = (CocoGUI::CocoTextButton*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "backtotopbutton"));
- //添加按鈕擡起事件
- bt->addReleaseEvent(this
- ,coco_releaseselector(HelloWorld::backToTop));
- //獲得滑動條
- CocoGUI::CocoSlider* sld = (CocoGUI::CocoSlider*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "slider"));
- //指定滑動條值改變的時候調用的方法
- sld->addPercentChangedEvent(this, coco_percentchangedselector(HelloWorld::sliderPercentChanged));
- //獲得點擊可以播放動畫的按鈕
- CocoGUI::CocoButton* anib = (CocoGUI::CocoButton*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "animationbutton"));
- //設置他的擡起事件
- anib->addReleaseEvent(this, coco_releaseselector(HelloWorld::playUIAnimation));
大家發現了,按鈕事件的包裝方法是不一樣的。所以,這裏大家要注意,控件不好使的時候先檢查下你事件的包裝方法。
- //利用layer來初始化BatchNodeManager Layer名爲"TEST_LAYER1"
- cs::BatchNodeManager::sharedBatchNodeManager()->initWithLayer(this, "TEST_LAYER");
- //利用動畫名,已經存在的信息,圖片路徑,plist文件的路徑,還有動畫的配置json 來添加一個動畫到動畫數據管理器中
- cs::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("TestBone", "", "TestBone0.png", "TestBone0.plist", "TestBone.json");
- //利用之前加載的TestBone.json (其中包含動畫名) 然後用這個動畫名進行初始化.
- armature = cs::Armature::create("TestBone");
- //使用文件中動畫序列編號
- armature->getAnimation()->playByIndex(0);
- //縮放比例
- armature->setScale(0.35);
- //設置放置的位置
- armature->setPosition(300, 0);
- //添加到界面上
- addChild(armature);
這個就是加載那個會動的牛仔,這個牛仔是用骨骼動畫做的,我們終於可以不用那蛋疼的序列幀了。
好了,Test中加載的代碼就介紹到這裏,有一些功能還需要自己去理解,自己去實踐。雖然,這個工具現在有很多BUG,但是,我們還是可以看見它的強大之處的,希望大拿們會在日後慢慢修復這些問題,也感謝觸控的無私奉獻。
CocoStudio 討論學習羣:141444261
Cocos2D-X 討論學習羣:244959010